繁体   English   中英

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

[英]Objective-C Mutable property, copy retain, etc?

当我为 Mutable 的接口声明一个属性时,我应该总是使它(非原子,复制)吗? 另外我什么时候会使用assign而不是retain?

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

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

永远不要使用retainstrong因为它们只在 ARC 关闭时才需要,并且您应该始终打开 ARC。 strongretain是相同的,这是启用 ARC 的默认行为。 只需打开 ARC 并忽略这些,除了向后兼容的代码。

有时,例如委托属性,使用retainstrong会造成内存泄漏。 在这些情况下,您需要使用weakassign 通常,您应该使用weak ,因为assign可能会出现罕见的边缘情况错误。

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

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

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

暂无
暂无

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

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