自 Objective-C 2.0 以来,我们有了属性,这是一种用于获取和设置实例变量值的良好语法。自 Clang 3.1 以来,所有非动态属性、非只读属性或没有自定义 getter 和 setter 的属性都自动合成到 ivars。自 ARC 以来,我们为属性提供了弱/强注释,ARC 使用这些注释来定义自动合成属性的内存管理逻辑。
属性仍然可以手动合成,例如例如,用于由 ivar 支持并返回默认值的只读属性。
有时,如果根本不合成属性,它们也很有用。当我使用这种行为时,我发现了一些用例:
- 自定义 getter 和 setter,它们使用自定义 ivar 来存储实际值并执行一些额外的操作。
- 动态属性,例如在
NSManagedObject
的子类中。 - 只读属性,它只传递存储在另一个属性(例如私有(private)属性)中的对象的属性。
问题: 根据实际使用情况,将这些非合成属性标注为 weak/strong 是否有意义?最佳做法是什么?
最佳答案
我会说答案是是,即使只是为了文档。
即使您不使用任何与编译器和框架相关的默认实现,而是自己实现所有内容,尝试使用这些属性的人如果能够获得提示,也会更好地理解 API内存管理的行为方式。一个人实际上不必知道 setter 或 getter 是如何在内部实现的,但他可能必须知道,例如,在调用 setter 之后,值是否被复制或保留或只是分配,并实现他的一面相应的事情。
关于ios - Objective-C 中非综合属性的弱/强注解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21613985/