max*_*son 3 cocoa-touch memory-management ios 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;
Run Code Online (Sandbox Code Playgroud)
我知道没有ARC,self.someProperty实际上是调用合成的setter方法,它向retain对象发送一条消息.但是现在使用ARC,如果我使用点符号设置这样的属性是否重要?
更一般地说,ARC真的意味着我根本不必担心引用计数吗?或者在某些情况下,我编写代码的方式可能会导致ARC出错?
区别与没有ARC的情况相同:通过使用点表示法,您调用合成的setter,并通过直接分配给ivar,您将使用setter方法.
在ARC下,两个选项之间的内存管理没有差异,但你仍然应该在两个选项之间做出有意识的决定:例如,直接分配到ivar旁路KVO,而通过setter方法稍微慢但可能更安全在大多数情况下,例如,当您稍后决定制作财产atomic或覆盖设定者时.
就个人而言,我总是使用财产符号,self.abc = ...;除非可能在init通常需要绕过KVO的地方.简而言之,使用您在ARC之前使用的相同推理.