在Objective-C与ARC,这是真的,我们通常只需要指定非原子财产属性?(In Objecti

2019-06-25 12:04发布

奇怪的是,在大的书呆子牧场的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;

其他两个( readwritestrong )是默认?

Answer 1:

读写能力强,确实是在ARC默认的*。 在手动引用计数,分配为(是)的默认。 我宁愿将其明确指定,因为它使得它更清楚什么@属性的参数,而不是依靠阅读代码知道默认值是什么人。

*强是默认假设你要么让编译器合成一个实例变量给你,或者已经宣布没有明确的所有权限定符(在这种情况下,伊娃是一个实例变量__strong默认反正)。 否则,默认财产所有权类型的实例变量的声明所有权预选赛匹配。 所以,如果你明确声明与伊娃__weak ,然后声明没有资格拥有它的@property,合成的属性将变弱。 这是所有记录中锵ARC文档 。



Answer 2:

默认情况下,对象属性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?