Swift 数组的强引用循环

Swift strong reference cycles with arrays

如果我有一个 class A,它有一个变量 x,它是 class B 的数组,而 class B 总是有一个 [=22 的父变量 y =] A、我该如何设置才能避免强引用循环。如果我输入

我会得到一个错误
class A {
weak var x = [B] 
...}

(即使我做到了 [B]?)而且放置

似乎是错误的方式
class B {
weak var y = A
...}

as class B 应该总是有一个 'parent' class A.

我想这是一个标准设置,所以想知道正常模式。非常感谢任何帮助。

如果B总是有一个parent,而parent会保证它不会在它的children之前消失,那么你可以使用unowned 而不是 weak。也就是说,unowned 有点危险,因为如果你错了,它会崩溃。

如果你想更安全一点(或者你不能保证 children 总是在它们的 parent 之前被销毁),那么正确的模式是弱引用parent.

关键在短语"should always have a 'parent'." 如果你的意思是应该,那么使用弱。如果你的意思是 必须 那么使用 unowned.

虽然可以创建 "weak arrays," 这不是一个很好的用途。 Parents 在你的例子中 "own"(强烈引用并保持活力)他们的 children。 Children 在这个系统中没有 "own" 他们的 parent,所以不应该有强引用。