Objective-C属性的默认属性是什么?

rs1*_*ith 42 cocoa-touch objective-c

当您没有在目标C中列出任何内容时,适当的默认属性是什么?

例如,如果我写这个:

@property float value;
Run Code Online (Sandbox Code Playgroud)

默认值是什么,比如它是只读的,是否会保留......等等?

jus*_*tin 65

默认/隐含值是atomic,readwriteassign.

原子

这意味着该值以原子方式读/写.相反,有点普遍的误解,原子也不能等同于线程安全.简单来说,它保证您读取或写入的值将被整体读取或写入(使用访问器时).即使您一直使用访问器,它也不是严格的线程安全的.

读写

该物业有一个二传手和一个吸气剂.

分配

此默认值通常用于POD(普通旧数据)和内置类型(例如int).

对于NSObject类型,您将倾向于持有强大的参考.在大多数情况下,你会申报财产copy,strongretain.assign不执行引用计数操作.另见:http://clang.llvm.org/docs/AutomaticReferenceCounting.html#property-declarations

强大

strong在某些情况下,该属性可能隐含在ARC下:

在没有所有权来源的情况下合成的可保留对象指针类型的属性具有其关联实例变量的所有权(如果它已经存在); 否则,[开始Apple 3.1,LLVM 3.1]其所有权隐含强大.在此次修订之前,合成这样的财产是不合理的.

  • 感谢您的更新...但您现在的答案仍然不完全清楚.正如我从clang-link中收集的那样,您从以下SO答案中收集了:http:http://stackoverflow.com/a/11041397/32749,*strong*而不是*retain*是自LLVM 3.1以来使用ARC时的属性的默认值. ..因此,当我使用ARC时,我不需要作为程序员明确声明*strong*.你同意吗? (2认同)

kla*_*udz 7

它等于

@property (atomic, readwrite, assign) float value;
Run Code Online (Sandbox Code Playgroud)


归档时间:

查看次数:

15231 次

最近记录:

12 年,5 月 前