2016-09-21 78 views
-2

“弱属性的一个常见用例是父子数据结构。按照惯例,父对象应该保持对它的子对象的强引用,并且子对象应该存储一个弱引用回到父代,弱引用也是委托设计模式的固有部分。“保留周期:“Parent-Child”

问:

1)为什么孩子可以店弱引用回到父?如果他们的父母“消失”怎么办?

2)代表设计模式这里指的是什么?这与弱引用有什么关系?

+0

许多重复像http://stackoverflow.com/questions/8449040/why-use-weak-pointer-for-delegation和http://stackoverflow.com/questions/14249395/reference-a-views-parent-without-getting-a-circular-import – ozgur

+0

@ozgur我不认为你很了解我的问题吗?我在问为什么“可以”而不是“应该”。我知道后面的保留周期。 –

+1

我猜“can”与父母被解除分配时想要发生的事情有关。只要你还乐意让孩子也被释放(在没有任何其他强烈的对孩子的引用的情况下),那么你可以使用一个弱引用。与委托人一样。对委托使用弱引用通常更简单,以便委托对象不必将其自身作为对象的委托进行显式删除,以允许自己被释放。 – Paulw11

回答

1

对于问题1,如果父节点被释放,则子节点中的弱引用将成为对释放对象的引用,并且使用它将导致异常。

避免这种情况的方法是让父母在释放它的孩子时释放它。这个孩子永远不会对被释放的父母有一个弱点,因为那个孩子在父母时会被释放。

对于问题2,here's a good reference for the delegate pattern.