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

问题描述 投票:3回答:1

例如,使用以下对象:

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;这是一个与我的问题无关的单独问题。

swift realm
1个回答
3
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.