首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >目标-C可变属性,复制保留等?

目标-C可变属性,复制保留等?
EN

Stack Overflow用户
提问于 2014-06-20 02:49:28
回答 2查看 968关注 0票数 0

当我为一个可变的接口声明一个属性时,我应该总是这样做(非原子的,复制的)吗?另外,我什么时候会使用赋值而不是保留?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-06-20 03:02:50

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

每当将新值设置为属性时,如果希望复制,请使用copy。请注意,在许多情况下,copy实际上不会生成对象的副本,因此这通常不会对性能产生影响,但是如果有人给您一个可变的副本(例如,您有一个NSString属性,并且有人指定了一个NSMutableString ),它可以解决错误。

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

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

票数 1
EN

Stack Overflow用户

发布于 2020-03-08 05:54:25

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

代码语言:javascript
复制
- (void)setPropertyName:(propertyType *)newProperty {

  if (propertyName) [propertyName release];
  propertyName = [newProperty mutableCopy];
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24319206

复制
相关文章

相似问题

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