在RealmSwift中,是当两个对象中的每一个都具有另一个对象的属性时创建的保留周期吗?

时间:2018-02-27 23:31:07

标签: swift realm

例如,使用以下对象:

import RealmSwift

// Dog model
class Dog: Object {
    @objc dynamic var name: String = ""
    @objc dynamic var owner: Person?
}

// Person model
class Person: Object {
    @objc dynamic var name: String = ""
    @objc dynamic var pet: Dog?
}

如果你按照以下方式创建一只狗和一个人:

let dog = Dog(name: "Pinto")
let guy = Person(name: "Joe")
dog.owner = guy
guy.pet = dog

这会创建一个保留周期吗?

注意:我不是在询问反向关系或LinkingObjects;这是一个与我的问题无关的单独问题。

1 个答案:

答案 0 :(得分:3)

是的,您的代码段会创建一个保留周期。但是,如果您随后将对象添加到Realm文件中,Realm将通过清除对象的实例变量来中断保留周期。

托管对象(即添加到Realm或从Realm检索的对象)不会在其实例变量中存储任何状态。相反,Realm会覆盖持久化属性的getter和setter,以从底层Realm文件读取或写入它们的值。因为在将对象添加到Realm后不再使用实例变量,所以Realm会清除它们以打破任何潜在的循环。