Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios Objective-C中非合成属性的弱/强注释_Ios_Objective C_Memory Management_Properties_Automatic Ref Counting - Fatal编程技术网

Ios Objective-C中非合成属性的弱/强注释

Ios Objective-C中非合成属性的弱/强注释,ios,objective-c,memory-management,properties,automatic-ref-counting,Ios,Objective C,Memory Management,Properties,Automatic Ref Counting,自从Objective-C2.0以来,我们就有了属性,这是一种很好的语法,用于获取和设置实例变量的值。由于Clang 3.1,所有非动态、非只读、无显式getter或无自定义getter和setter的属性都会自动合成到IVAR中。自ARC以来,我们对属性进行了弱/strong注释,ARC使用这些注释定义自动合成属性的内存管理逻辑 属性仍然可以手动合成,,例如,对于ivar支持的只读属性,返回默认值 有时,如果根本不进行合成,属性也很有用。当我使用这种行为时,我发现了一些用例: 一种自定义ge

自从Objective-C2.0以来,我们就有了属性,这是一种很好的语法,用于获取和设置实例变量的值。由于Clang 3.1,所有非动态、非只读、无显式getter或无自定义getter和setter的属性都会自动合成到IVAR中。自ARC以来,我们对属性进行了弱/strong注释,ARC使用这些注释定义自动合成属性的内存管理逻辑

属性仍然可以手动合成,例如,对于ivar支持的只读属性,返回默认值

有时,如果根本不进行合成,属性也很有用。当我使用这种行为时,我发现了一些用例:

  • 一种自定义getter和setter,使用自定义ivar存储实际值并执行一些附加操作
  • 动态属性,例如在
    NSManagedObject
    的子类中
  • 一种只读属性,仅通过存储在另一个属性(例如私有属性)中的对象的属性进行传递
问题:根据这些非合成属性的实际使用情况,使用弱/strong注释它们是否有意义?最佳做法是什么


()

我会说答案是肯定的,即使只是为了文档的缘故

即使您不使用任何与编译器和框架相关的默认实现,并且自己实现所有内容,尝试使用这些属性的人如果能够获得内存管理行为的提示,将能够更好地理解API。一个人实际上不必知道setter或getter是如何在内部实现的,但他可能需要知道,例如,在调用setter之后,值是否被复制、保留或只是被赋值,并相应地实现他自己的部分。

是的,确实如此


属性定义是合同规范。仅仅因为编译器没有履行契约并不意味着在手动实现访问器方法时不应该尊重它。

旁注-没有显式getter方法的只读属性可以自动合成。@rmaddy感谢您的提示,我在第二句中修复了这一点。。。