ios - 类可以包含自身的引用变量吗?

标签 ios swift core-data automatic-ref-counting

我可以有一个“Person”类,其中有一个“Person”类型的“bestFriend”变量吗?如果是这样,如何防止发生强引用循环?我可以正常声明该变量,但是当我尝试将 at 声明为弱变量或无主变量时,出现错误。

class Person: NSManagedObject {
    @NSManaged var name:String?
    @NSManaged var age:Int?
    @NSManaged var bestFriend:Person?
}

如果我尝试像这样声明变量:

@NSManaged weak var bestFriend:Person? //This generates an error

@NSManaged unowned var bestFriend:Person? //This generates an error

错误 -“属性‘bestFriend’在类 Person 上被标记为弱。无法为其生成 setter 方法。”

更新

该类现在是 NSManagedObject 的子类,因此我可以使用 CoreData 存储它。我稍微改变了我的代码以反射(reflect)这一点。同样的问题仍然存在。如何防止强引用循环的发生?我无法将“bestFriend”变量声明为“weak”或“unowned”而不生成上面列出的错误。

最佳答案

Person 是 NSManagedObject 的子类型吗?如果是这样,是的,属性必须很强。这可能会导致强引用循环。你必须专门打破它们:

Breaking Strong References Between Objects

As opposed to the default behavior between managed objects and their managed object contexts, with relationships between managed objects, each object maintains a strong reference to the object or objects to which it is related. This relationship can cause strong reference cycles which in turn can cause objects to be held in memory long past their usefulness. To ensure that reference cycles are broken, when you are finished with an object, you can use the managed object context method refreshObject:mergeChanges: to turn the managed object into a fault.

(来自 CoreData Programming Guide )。

关于ios - 类可以包含自身的引用变量吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37125390/

相关文章:

ios - UITableViewCell ios 的错误

swift - 用另一个字符串替换一个字符串

arrays - Index Range Swift 中的新数组

iphone - 通过迁移将核心数据索引添加到某些属性

iphone - 输入有效值后如何启用 UIButton

ios - 当网络状态从蜂窝网络变为 wifi 时如何重新连接 VPN?

ios - UITextView 在检测到 Action 时更改字体

ios - 你把整个应用程序的逻辑放在哪里?

ios - 在 iOS 中处理两个屏幕和一个事件指示器

ios - 核心数据 NSFetchedResultsController 和批量大小设置加载所有行