使用数组快速建立强大的参考周期

时间:2018-11-06 08:19:55

标签: swift strong-reference-cycle

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

会收到错误消息
class A {
weak var x = [B] 
...}

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

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

因为B类应该始终具有“父级” A类。

我想这是一个标准设置,所以想知道正常模式。任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:1)

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

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

关键在于短语“应始终有一个'父母'”。如果您的意思是应该,请使用弱。如果您的意思是 must ,请使用unowned

虽然可以创建“弱数组”,但这并不是很好的用法。在您的示例中,父母“拥有”(强烈引用并保持生命)他们的孩子。该系统中的孩子不“拥有”父母,因此不应有很强的参考意义。