2016-09-21 96 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.