我可以拥有一个" Person"有一个" bestFriend"类型" Person"?的变量如果是这样,我如何防止强烈的参考周期发生?我可以正常声明变量,但是当我尝试将其声明为弱或无主时,我会收到错误。
class Person: NSManagedObject {
@NSManaged var name:String?
@NSManaged var age:Int?
@NSManaged var bestFriend:Person?
}
如果我尝试像这样声明变量:
@NSManaged weak var bestFriend:Person? //This generates an error
或
@NSManaged unowned var bestFriend:Person? //This generates an error
错误 - "属性' bestFriend'在类Person上被标记为弱。无法为它生成setter方法。"
更新
该类现在是NSManagedObject的子类,因此我可以使用CoreData存储它。我稍微更改了我的代码以反映这一点。同样的问题仍然存在。如何防止强烈的参考周期发生?我无法宣布" bestFriend"变量为"弱"或"无主"没有产生我上面列出的错误。
答案 0 :(得分:2)
Person是NSManagedObject的子类型吗?如果是这样,是的,属性必须很强。这可能会导致强大的参考周期。你必须明确地打破它们:
打破对象之间的强引用
与托管对象及其托管对象上下文之间的默认行为相反,通过托管对象之间的关系,每个对象都维护对与其相关的对象的强引用。这种关系可能会导致强大的参考周期,这反过来会导致对象长时间保留在存储器中。为确保引用周期被破坏,当您完成对象时,可以使用托管对象上下文方法refreshObject:mergeChanges:将托管对象转换为故障。