[英]Objective-C Mutable property, copy retain, etc?
当我为 Mutable 的接口声明一个属性时,我应该总是使它(非原子,复制)吗? 另外我什么时候会使用assign而不是retain?
当您更关心性能而不是线程安全时,请使用nonatomic
。 原子属性是线程安全的,但速度较慢。 默认行为是atomic
。
如果您希望在为属性设置新值时进行复制,请使用copy
。 请注意,在许多情况下, copy
不会实际制作对象的副本,因此这通常不会影响性能,但是如果有人给您一个可变副本(例如,您有一个NSString
属性并且有人分配了一个NSMutableString
,则可以解决错误。
永远不要使用retain
或strong
因为它们只在 ARC 关闭时才需要,并且您应该始终打开 ARC。 strong
和retain
是相同的,这是启用 ARC 的默认行为。 只需打开 ARC 并忽略这些,除了向后兼容的代码。
有时,例如委托属性,使用retain
或strong
会造成内存泄漏。 在这些情况下,您需要使用weak
或assign
。 通常,您应该使用weak
,因为assign
可能会出现罕见的边缘情况错误。
通常,您在类实现中@synthesize
一个属性,它创建一个 set 函数。 您可以编写自己的属性集函数,并在那里进行可变副本。 问题解决了...
- (void)setPropertyName:(propertyType *)newProperty {
if (propertyName) [propertyName release];
propertyName = [newProperty mutableCopy];
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.