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