例如,使用以下对象:
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;这是一个与我的问题无关的单独问题。
答案 0 :(得分:3)
是的,您的代码段会创建一个保留周期。但是,如果您随后将对象添加到Realm文件中,Realm将通过清除对象的实例变量来中断保留周期。
托管对象(即添加到Realm或从Realm检索的对象)不会在其实例变量中存储任何状态。相反,Realm会覆盖持久化属性的getter和setter,以从底层Realm文件读取或写入它们的值。因为在将对象添加到Realm后不再使用实例变量,所以Realm会清除它们以打破任何潜在的循环。