奇怪的是,在大的书呆子牧场的iOS 5本书(第73页)和编程的iOS 5本书(O'Reilly出版,p.314)(updadte:连科昌的Objective-C的书第四版),在ARC的情况下,他们说对属性的默认属性是assign
......但苹果的文件说,默认为strong
。
我也试过一个简单的程序在那里,如果我不指定strong
,程序工作正常,如果我指定strong
,它的工作原理是相同的,而当assign
来代替,编译器显示一个警告,所以它似乎默认为的确strong
。
所以,如果大部分的时间,我们希望
@property (nonatomic, readwrite, strong) NSMutableArray *foo;
那么,我们可以只写
@property (nonatomic) NSMutableArray *foo;
其他两个( readwrite
和strong
)是默认?
读写能力强,确实是在ARC默认的*。 在手动引用计数,分配为(是)的默认。 我宁愿将其明确指定,因为它使得它更清楚什么@属性的参数,而不是依靠阅读代码知道默认值是什么人。
*强是默认假设你要么让编译器合成一个实例变量给你,或者已经宣布没有明确的所有权限定符(在这种情况下,伊娃是一个实例变量__strong
默认反正)。 否则,默认财产所有权类型的实例变量的声明所有权预选赛匹配。 所以,如果你明确声明与伊娃__weak
,然后声明没有资格拥有它的@property,合成的属性将变弱。 这是所有记录中锵ARC文档 。
默认情况下,对象属性strong, atomic, readwrite
。 见https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/ProgrammingWithObjectiveC/EncapsulatingData/EncapsulatingData.html
文章来源: In Objective-C with ARC, is it true that we usually only need to specify nonatomic as property attributes?