Objective-C可变属性,复制保留等?

时间:2014-06-20 02:49:29

标签: objective-c properties mutable

当我为一个Mutable接口声明一个属性时,我应该总是这样做(非原子,复制)吗?我何时才会使用assign而不是retain?

2 个答案:

答案 0 :(得分:1)

当您更关心性能而不是线程安全时,请使用nonatomic。原子属性是线程安全但速度较慢。默认行为是atomic

如果希望在为属性设置新值时进行复制,请使用copy。请注意,在许多情况下,copy实际上不会复制对象,因此这通常不会对性能产生影响,但如果有人为您提供可变副本(例如,您有NSString,则可以解决错误属性和某人分配NSMutableString

请勿使用retainstrong,因为只有在ARC关闭时才需要这些,并且您应始终打开ARC。 strongretain相同,这是启用ARC的默认行为。只需打开ARC并忽略这些,但向后兼容的代码除外。

有时,例如使用retainstrong的委托属性会产生内存泄漏。在这些情况下,您需要使用weakassign。一般情况下,您应该使用weak,因为assign可能会遇到罕见的边缘案例错误。

答案 1 :(得分:0)

通常,您在类实现中@synthesize创建一个设置函数的属性。您可以编写自己的属性集函数,并在那里进行可变复制。问题解决了...

- (void)setPropertyName:(propertyType *)newProperty {

  if (propertyName) [propertyName release];
  propertyName = [newProperty mutableCopy];
}