繁体   English   中英

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

[英]Modifying arrays (returned by getter as e.g. int**) in Obj-C

假设有一个类:

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

是。 您将返回一个指针,然后修改所指向的值。 这是完全合法的。 如果您不希望这样做,则需要向类型添加适当的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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM