4

我需要这样的东西:

@property (nonatomic, retain) int field[10][10];

但这段代码不起作用。如何更换它?我需要 setter 和 getter 方法

4

4 回答 4

6

如果将数组包装在结构中,则可以这样做。@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;
于 2013-07-09T14:02:50.580 回答
4

如果我理解正确,你需要这样的东西:

@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()它。

于 2013-07-09T13:56:58.903 回答
0

编写 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;
}
于 2013-07-09T12:49:23.720 回答
0

这很简单。

    @interface MyClass
    {
        int _fields[10][10]; 
    }

    @property(readonly,nonatomic) int **fields;

    @end

    @implementation MyClass

    - (int *)fields
    {
        return _fields;
    }

    @end

在属性中使用只读,因为它是一个固定指针,您不会更改它,这并不意味着您不能修改数组中的值。

于 2013-07-09T14:04:17.473 回答