自动参考计数&合成属性

时间:2011-12-12 13:28:35

标签: ios cocoa-touch memory-management automatic-ref-counting

使用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出错?

1 个答案:

答案 0 :(得分:6)

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

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

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