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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在RealmSwift中,当两个对象中的每一个都具有另一个对象的属性时,是否创建了一个保留周期?相关的知识,希望对你有一定的参考价值。

例如,使用以下对象:

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

答案

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

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

以上是关于在RealmSwift中,当两个对象中的每一个都具有另一个对象的属性时,是否创建了一个保留周期?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 RealmSwift 存储字典?

我们如何比较 RealmSwift List 和 Json 嵌套数组中的值?

TextField不会从RealmSwift加载

Swift 项目:ReactiveSwift+MVVM+RealmSwift+Alamofire+OM

Django 管理员。当对象具有布尔字段== True时,如何为列表视图中的每一行添加背景颜色?

无法解析 RealmSwift 中的格式字符串