我需要这样的东西:
@property (nonatomic, retain) int field[10][10];
但这段代码不起作用。如何更换它?我需要 setter 和 getter 方法
我需要这样的东西:
@property (nonatomic, retain) int field[10][10];
但这段代码不起作用。如何更换它?我需要 setter 和 getter 方法
如果将数组包装在结构中,则可以这样做。@property 表示法支持结构(例如,请参阅 CALayer 上的 CGRect 边界)。
首先定义你的结构:
typedef struct {
int contents[10][10];
} TenByTenMatrix;
然后,在您的类界面中,您可以执行以下操作:
@property (assign) TenByTenMatrix field;
请注意,在这种情况下,您只能使用该属性获取或设置整个数组。所以你不能做
self.field.contents[0][0] = 1;
你必须做
TenByTenMatrix temp = self.field;
temp.contents[0][0] = 1;
self.field = temp;
如果我理解正确,你需要这样的东西:
@property(nonatomic, assign) int** field;
请注意,您不能retain
在此处使用,因为它仅可用于对象(并且int
是原始类型)。
然后您可以通过以下方式使用它:
//some initialization - just an example, can be done in other way
self.field = malloc(10 * sizeof(int));
for(int i = 0; i < 10; i++) {
self.field[i] = malloc(10 * sizeof(int));
}
//actual usage
self.field[2][7] = 42;
int someNumber = self.field[2][7];
因为属性的类型是assign
,所以您必须注意内存管理。您可以为属性创建自定义设置器field
并调用free()
它。
编写 setter 和 getter
- (int) field:(int)i j:(int)j {
return field[i][j];
}
- (void)setField:(int)i j:(int)j toValue:(int)value {
field[i][j] = value;
}
这很简单。
@interface MyClass
{
int _fields[10][10];
}
@property(readonly,nonatomic) int **fields;
@end
@implementation MyClass
- (int *)fields
{
return _fields;
}
@end
在属性中使用只读,因为它是一个固定指针,您不会更改它,这并不意味着您不能修改数组中的值。