nop*_*ole 8 objective-c automatic-ref-counting
奇怪的是,在Big Nerd Ranch iOS 5书(第73页)和编程iOS 5书(O'Reilly,第314页)(updadte:甚至Kochan的Objective-C第四版),在ARC的背景下,他们比如属性的默认属性是assign......但是Apple的文档说默认是strong.
我还尝试了一个简单的程序,如果我没有指定strong,程序工作正常,如果我指定strong,它的工作方式相同,而当assign使用时,编译器显示警告,所以看起来默认是确实如此strong.
因此,如果大多数时间,我们想要
@property (nonatomic, readwrite, strong) NSMutableArray *foo;
Run Code Online (Sandbox Code Playgroud)
然后我们就可以写了
@property (nonatomic) NSMutableArray *foo;
Run Code Online (Sandbox Code Playgroud)
因为其他两个(readwrite和strong)是默认的?
And*_*sen 12
readwrite和strong,确实是ARC*下的默认值.在手动引用计数下,assign是(是)默认值.我更喜欢明确地指定这些,因为它使得@属性的参数更清楚,而不是依赖于读取代码的人知道默认值是什么.
*strong是默认值,假设你让编译器为你合成一个实例变量,或者声明了一个没有显式所有权限定符的实例变量(在这种情况下,ivar __strong默认是默认的).否则,默认属性所有权类型与ivar声明中的所有者限定符匹配.因此,如果你明确声明了一个ivar __weak,然后在没有所有权限定符的情况下为它声明一个@property,那么合成属性将会很弱.这些都记录在Clang ARC文档中.