我看到很多讨论说我应该使用copyNSString 属性,因为它会阻止其他人在我背后更改它。但那我们为什么不直接设置readonly财产呢?
Update
谢谢回答我的问题。但问题是,对于 NSString 属性,你总是不希望别人修改它,对吧?你可以自己修改,但绝对不能让别人修改。我想大多数时候 NSString 都会设置它的初始值(由你或其他人设置),之后只有你会修改它。那为什么不直接使用 readonly 属性
其实我大部分时间都用copy。但后来我意识到大多数时候我只在 init 方法中使用这些设置器。所以我认为对于这些情况我应该使用只读而不是复制。
所以让我这样问一个问题:如果你只在 init 方法中为 NSString 使用这些 setter,那么你应该使用 readonly。这是一个合理的结论吗?
如果您只在 init 方法中为 NSString 使用这些 setter,那么您应该使用 readonly。这是一个合理的结论吗?
因为您不应该在部分构造的状态下使用访问器(init
/dealloc
),那么你应该将其声明为copy
and readonly
,然后在初始化器中执行复制:
- (id)initWithName:(NSString *)inName
{
self = [super init];
if (0 != self) {
name = [inName copy];
}
return self;
}
更详细地说,copy
and readonly
是语义上不同的概念。
它们一起提供了很好的安全性,但单独使用时:
最安全的方法是使用copy
and readonly
.
显然,你会使用readwrite
当您需要为客户提供设置者并且您支持这种更改时。
保留字符串(或数组,或...)而不是复制通常是一个坏主意。不复制这些类型几乎没有什么好处,而且可能会导致微妙的错误。即使您正在处理可变类型,您通常也需要一个可变副本(编译器不会为您合成)。保留或分配这些类型几乎从来都不是您想要的。我犯的一个例外是在处理大量分配时,其中数据封装得很好(例如,一个重的分配)NSMutableData
例如,我将所有权从一个地方传递到另一个地方以避免复制)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)