在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 List 和 Json 嵌套数组中的值?
Swift 项目:ReactiveSwift+MVVM+RealmSwift+Alamofire+OM