繁体   English   中英

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

[英]Weak/Strong Annotations for Non-Synthesized Properties in Objective-C

从Objective-C 2.0开始,我们有了一个属性 ,一个很好的语法来获取和设置实例变量的值。 由于Clang 3.1所有非动态的属性,不具有显式getter的readonly或没有自定义getter和setter,都会自动合成到ivars。 而且,由于ARC,我们对属性使用弱/强注释 ,ARC使用这些属性来定义自动合成属性的内存管理逻辑

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

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

  • 自定义getter和setter,它使用自定义ivar存储实际值并执行一些其他操作。
  • 动态属性,例如NSManagedObjectNSManagedObject
  • 一个只读属性,它只是通过存储在另一个属性(例如私有属性)中的对象的属性。

问题:根据实际使用情况,用弱/强注释这些非合成属性是否有意义? 什么是最佳做法?

https://twitter.com/kubanekl/status/427142577310408704

我会说答案是肯定的 ,即使只是为了记录。

即使您不使用任何与编译器和框架相关的默认实现,并自己实现所有内容,如果能够获得有关内存的提示,那么尝试使用这些属性的人将更好地理解API。管理会表现出来。 一个人并不真的必须知道如何在内部实现setter或getter,但他可能必须知道,例如,如果在调用setter之后,该值被复制或保留或仅被分配,并实现他的一面相应的事情。

是的,它确实。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM