0

假设有一个类:

@interface FooBar : NSObject

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

@end

空间属性实现如下:

@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;

?

4

1 回答 1

3

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

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


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

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

-(int **) _getSpace {
    return m_space;
}
@end
于 2012-05-30T20:01:08.407 回答