首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSMutableArray as @property with readonly

NSMutableArray as @property with readonly
EN

Stack Overflow用户
提问于 2009-03-21 00:01:46
回答 2查看 5.1K关注 0票数 4

假设我有这样的东西:

代码语言:javascript
复制
@property (readonly) NSMutableArray *someArray;

即使@属性设置为readonly,我也可以修改obj someArray吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-03-21 00:06:39

可以,您可以修改其内容。readonly只适用于指针本身--在这种情况下,它不像C++的const

基本上,说“只读”只是意味着“不要把a.someArray = foo翻译成[a setSomeArray:foo]”。也就是说,不创建setter。

(当然,如果您想防止修改,只需使用NSArray即可。)

票数 10
EN

Stack Overflow用户

发布于 2009-03-21 00:14:39

someArray的内容是可修改的,尽管该属性不可修改(即调用不能通过为该属性赋值来更改someArray实例变量的值)。注意,这与C++的const的语义不同。如果你希望数组实际上是只读的(即读取器不能修改),你需要用一个自定义的访问器包装它。在@interface中(假设你的someArray属性)

代码语言:javascript
复制
@property (readonly) NSArray *readOnlyArray;

@implementation

代码语言:javascript
复制
@dynamic readOnlyArray;

+ (NSSet*)keyPathsForValuesAffectingReadOnlyArray {
  return [NSSet setWithObject:@"someArray"];
}
- (NSArray*)readOnlyArray {
  return [[[self someArray] copy] autorelease];
}

注意,调用者仍然能够改变数组中对象的状态。如果你想防止这种情况,你需要让它们在插入时不可变,或者在readOnlyArray访问器中执行数组的深度复制。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/668418

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档