gpt4 book ai didi

objective-c - 类别和实例变量

转载 作者:行者123 更新时间:2023-12-03 16:26:17 25 4
gpt4 key购买 nike

我正在尝试向 NSMutableArray 添加一个类别,以允许我将其用作 2D 数组(由 1D 数组支持,并提供将 x 和 y 索引转换为平面索引的方法) 。由于我不允许将实例变量添加到类别中,因此我应该如何跟踪计算数组索引所需的行数和列数?

这是界面:

@interface NSMutableArray (TK2DMutableArray)
- (id) initWithColumns:(int) columns rows:(int) rows;
- (id) objectAtColumn:(int) col row:(int) row;
- (void) putObject:(id) object atColumn:(int) x Row:(int) y;
@end

这是实现:

@implementation TK2DMutableArray

- (id) initWithColumns:(int) x rows:(int) y {
self = [self initWithCapacity:x * y];

return self;
}

- (id) objectAtColumn:(int) col row:(int) row {
return [self objectAtIndex:[self indexAtColumn:col row:row]];
}

- (void) putObject:(id) object atColumn:(int) x row:(int) y {
[self replaceObjectAtIndex:[self indexAtColumn:x row:y] withObject:object];
}

- (int) indexAtColumn:(int) col row:(int) row {
return (col + (row * rows));
}

@end

我最初将其编码为 NSMutableArray 的子类;我现在知道在阅读了一些关于类集群的内容后这是一个错误。问题就在最后一个方法中 - 我应该如何处理rows?如果我进行子类化,它将是一个常规的旧 ivar。

我完全期待被告知创建一个带有 NSMutableArray 作为属性的新类,但我想看看是否有办法首先使用类别来实现这一点。

非常感谢。

最佳答案

在 10.6 及更高版本(我不确定 iOS)上,您可以使用 objc_setAssociatedObject 将任意事物关联到对象,请参阅 this Apple doc 。您可以使用此机制来“添加”和ivar。

但我认为您最好创建一个带有 NSMutableArray 作为属性的新类。这样,您可以在类型级别区分一维数组和二维数组,以便编译器可以警告您。例如,您不想意外地在二维数组上使用 objectAtIndex:,对吗?

关于objective-c - 类别和实例变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3679195/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com