类可以包含自身的引用变量吗?

时间:2016-05-09 21:01:50

标签: ios swift core-data automatic-ref-counting

我可以拥有一个" 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"变量为"弱"或"无主"没有产生我上面列出的错误。

1 个答案:

答案 0 :(得分:2)

Person是NSManagedObject的子类型吗?如果是这样,是的,属性必须很强。这可能会导致强大的参考周期。你必须明确地打破它们:

  

打破对象之间的强引用

     

与托管对象及其托管对象上下文之间的默认行为相反,通过托管对象之间的关系,每个对象都维护对与其相关的对象的强引用。这种关系可能会导致强大的参考周期,这反过来会导致对象长时间保留在存储器中。为确保引用周期被破坏,当您完成对象时,可以使用托管对象上下文方法refreshObject:mergeChanges:将托管对象转换为故障。

(来自CoreData Programming Guide)。