ios - Objective-C 中非综合属性的弱/强注解

标签 ios objective-c memory-management properties automatic-ref-counting

自 Objective-C 2.0 以来,我们有了属性,这是一种用于获取和设置实例变量值的良好语法。自 Clang 3.1 以来,所有非动态属性、非只读属性或没有自定义 getter 和 setter 的属性都自动合成到 ivars。自 ARC 以来,我们为属性提供了弱/强注释,ARC 使用这些注释来定义自动合成属性的内存管理逻辑

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

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

  • 自定义 getter 和 setter,它们使用自定义 ivar 来存储实际值并执行一些额外的操作。
  • 动态属性,例如在 NSManagedObject 的子类中。
  • 只读属性,它只传递存储在另一个属性(例如私有(private)属性)中的对象的属性。

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

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

最佳答案

我会说答案是,即使只是为了文档。

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

关于ios - Objective-C 中非综合属性的弱/强注解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21613985/

相关文章:

ios - 从 Realm 中删除模型,但让对象保持事件状态

ios - 使用 Codable 和 JSONParser 进行通用网络解码

Objective-C 内存管理(分配和自动释放)

ios - 按 editButtonItem 不会启用/禁用删除滑动

c++ - 为什么对堆栈中的内存使用自定义动态内存分配?

c# - 锁字典不断增长,不知如何清理?

ios - Mac OS X 钥匙串(keychain)访问 : "A default keychain could not be found" error

iOS 图形引擎

ios - 阻止将对象添加到数组......无法让它工作

iphone - 在 for 循环中附加字符串 (NSString) 时遇到问题