当你没有在目标C中列出任何属性时,属性的默认属性是什么?
例如,如果我写了以下内容:
@property float value;
默认值是什么,比如它是只读的,它是否保留...等
当你没有在目标C中列出任何属性时,属性的默认属性是什么?
例如,如果我写了以下内容:
@property float value;
默认值是什么,比如它是只读的,它是否保留...等
默认/隐式值为atomic
、readwrite
和assign
.
atomic
这意味着该值是以原子方式读取/写入的.与一些流行的误解相反,原子性并不等于线程安全.简单地说,它保证您读取或写入的值将被整体读取或写入(当使用访问器时).即使一直使用访问器,也不是严格意义上的线程安全.
readwrite
该属性被赋予一个setter和一个getter.
assign
此默认值通常用于POD(普通旧数据)和内置类型(例如int
).
对于NSObject
种类型,你会倾向于持有强引用.在大多数情况下,您将申报财产copy
、strong
或retain
.assign
不执行引用计数操作.另见:http://clang.llvm.org/docs/AutomaticReferenceCounting.html#property-declarations
strong
在某些情况下,该属性在ARC下可能隐式为strong
:
可保留对象指针类型的属性,在没有所有权来源的情况下合成,如果该属性已存在,则该属性拥有其关联实例变量的所有权;否则,[从苹果3.1开始,LLVM 3.1]它的所有权就相当强大.在这次修订之前,合成这样一个属性是不正确的.