繁体   English   中英

自动引用计数和合成属性

[英]Automatic Reference Counting & Synthesized Properties

使用ARC for iOS时,以下是否有任何区别?

@property (strong, nonatomic) NSObject *someProperty;
...
@synthesize someProperty;

//and then in the init method, either:
self.someProperty = aProperty;

//or
someProperty = aProperty;

我知道没有ARC,self.someProperty实际上是调用合成的setter方法,该方法向对象发送一条retain消息。 但是现在使用ARC,如果我使用点符号设置这样的属性是否重要?

更一般地说,ARC真的意味着我根本不必担心引用计数吗? 或者在某些情况下,我编写代码的方式可能会导致ARC出错?

区别与没有ARC的情况相同:通过使用点表示法,您调用合成的setter,并通过直接分配给ivar,您将使用setter方法。

在ARC下,两个选项之间的内存管理没有差异,但你仍然应该在两个选项之间做出有意识的决定:例如,直接分配到ivar旁路KVO,而通过setter方法稍微慢但可能更安全在大多数情况下,例如,当您稍后决定使属性成为atomic或覆盖设置器时。

就个人而言,我总是会使用属性表示法self.abc = ...; 除了可能在init ,通常需要绕过KVO。 简而言之,使用您在ARC之前使用的相同推理。

暂无
暂无

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

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