在Obj-C中修改数组(由getter返回,例如int **)

时间:2012-05-30 19:56:54

标签: objective-c arrays getter

假设有一个类:

@interface FooBar : NSObject

@property(readonly, getter = _getSpace) int** space;

@end

space属性实现如下:

@implementation FooBar

int m_space1[256];
int m_space2[256];
int* m_space[2] = { m_space1, m_space2};

-(int **) _getSpace {
    return m_space;
}

@end

使用:

更改int [2] [256]数组是否合法
FooBar * f = [[FooBar alloc] init];
f.space[1][120] = 0;

1 个答案:

答案 0 :(得分:3)

是。您将返回一个指针,然后修改指向的值。这是完全合法的。如果您不想允许这样,那么您需要在类型中添加适当的const修饰符。

返回结构并直接修改该结构是不合法的。


正如KennyTM在评论中提到的,您的m_space{,1,2}变量是全局变量,而不是您可能想要的实例变量。解决此问题的最简单方法是在@implementation中放置一个ivar块,如

@implementation FooBar {
    int m_space1[256];
    int m_space2[256];
    int* m_space[2] = { m_space1, m_space2 };
}

-(int **) _getSpace {
    return m_space;
}
@end