【发布时间】:2014-09-13 01:14:09
【问题描述】:
我有一个名为 Folder 的 Core Data NSManagedObject,上面有一个属性“account”。因为这是一个 NSManagedObject,所以属性是 strong。
然后我有一个 FolderProtocol 声明属性“account”也很强大。
然后我有另一个对象,称为 FolderCombo,它符合 FolderProtocol。问题是我需要在这个 FolderCombo 上声明属性“account”weak。
帐户具有文件夹以及FolderCombos。 Folders 没有保留周期,因为 CoreData 负责处理(关系使用 ID 而不是实际对象),但是对于 FolderCombos,除非我特别声明“account" 属性weak。
所以一切都很好但是我有一个警告我无法摆脱。我可以/我应该取消这个警告吗?有适当的解决方法吗?
Warning: 'retain (or strong)' attribute on property 'account' does not match the property inherited from 'FolderProtocol'
【问题讨论】:
-
我认为你应该把它从
strong改成retain,如果你改变了默认类型,警告应该消失。 -
我想听听您在采用该协议的类中将其定义为
weak的原因是什么。保持一致 - 例如,将其设为strong(或等效地,retain)无处不在 - 很可能会让您在以后头疼。 -
@NicolasMiari 如果您阅读上面的内容,由于保留周期,我不能让它变得强大。我也将其更改为保留,警告是相同的
-
糟糕,很抱歉没有通读!是的,retain 和 strong 是等价的。你不能让它到处变弱吗?
-
避免保留循环的标准方法是在对象图中有一个清晰的层次结构,并让“父对象”持有对“子对象”的强引用(而不是相反)。
标签: ios objective-c core-data memory-management