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,所以不应该有强引用。
如果我有一个 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,所以不应该有强引用。