0

如果我有一个 A 类,它有一个变量 x,它是 B 类的一个数组,而 B 类总是有一个 A 类的变量 y 父级,我该如何设置以避免强引用循环。如果我输入,我会收到错误

class A {
weak var x = [B] 
...}

(即使我做到了[B]?)而且似乎是错误的放置方式

class B {
weak var y = A
...}

因为 B 类应该总是有一个“父”类 A。

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

4

1 回答 1

1

如果B将始终有一个父级,并且父级将确保它不会在其子级之前消失,那么您可以使用unowned而不是weak. 也就是说,这unowned有点危险,因为如果你错了,它就会崩溃。

如果你想更安全一点(或者你不能保证孩子总是在父母之前被销毁),那么正确的模式是对父母的弱引用。

关键在于“应该总是有一个'父母'”这句话。如果您的意思是should,请使用弱。如果您的意思是必须使用unowned.

虽然可以创建“弱数组”,但这并不是一个很好的用途。在您的示例中,父母“拥有”(强烈提及并保持活力)他们的孩子。这个系统中的孩子并不“拥有”他们的父母,因此不应该有很强的参考。

于 2018-11-06T18:43:41.980 回答