如果我有一个类A,它的变量x是类B的数组,而类B的父类总是有y的变量y,那么如何设置以避免强引用循环。我输入
会收到错误消息class A {
weak var x = [B]
...}
(即使我做到了[B]?),这似乎也是错误的放置方式
class B {
weak var y = A
...}
因为B类应该始终具有“父级” A类。
我想这是一个标准设置,所以想知道正常模式。任何帮助表示赞赏。
答案 0 :(得分:1)
如果B
将始终有一个父级,并且父级将确保它不会在其子级之前消失,那么您可以使用unowned
而不是weak
。也就是说,unowned
有点危险,因为如果您输入错误,它将崩溃。
如果您想更安全一些(或者您不能保证孩子总是在父母面前被摧毁),那么正确的模式就是对父母的弱引用。
关键在于短语“应始终有一个'父母'”。如果您的意思是应该,请使用弱。如果您的意思是 must ,请使用unowned
。
虽然可以创建“弱数组”,但这并不是很好的用法。在您的示例中,父母“拥有”(强烈引用并保持生命)他们的孩子。该系统中的孩子不“拥有”父母,因此不应有很强的参考意义。