2014-04-19 22 views
2

試圖通過閱讀這個explanation來理解Objectice-C中的強與弱引用,這對我來說很重要。但有一種情況我無法真正弄清楚。假設它在ARC環境中,我將使用 - (連字符)作爲強引用,而。(點)作爲現在的弱引用。比方說,我有一個視圖控制器對象MyViewController vc = [MyViewController alloc] init];,它有看法,所以他們的關係就像是UIView上的多個強引用Objective-C

VC ------視圖

具有很強的參考。一旦vc被釋放,view也將被釋放。

如果我想從Interface Builder中將視圖添加到視圖中,例如UILabel,並將其連接到對象,通常我會聲明弱引用ivar @property (weak, nonatomic) IBOutlet UILabel *myLabel,因爲視圖已經有很強的參考。所以,現在的關係看起來像

VC ------查看------ myLabel

VC ............... ... myLabel

因此,當vc被重新分配時,view被取消分配,然後myLabel也被取消分配。但是,如果我還設置vcmylabel之間有很強的參考,現在的關係變得

VC ------查看------ myLabel

VC - ---- myLabel

vc被釋放時,myLabel是否也會被釋放?我認爲是因爲現在沒有任何對象強烈地提到它。但我想確認一下。如果我在這裏丟失任何東西,請告訴我。提前致謝。

回答

1

首先 - 很好的解釋你的問題,做得好。

對你的問題的簡短回答 - 當vc被釋放,myLabel也將被釋放,即使它對它有強烈的引用。

因爲或強壯/保留關係如何工作。這是一些僞代碼

vc --- view --- myLabel 

vc.dealloc { 
    [myLabel release]; // reduces retainCount by 1, doesn't dealloc 
    [view release]; // reduces retainCount by 1, triggers dealloc 
} 

view.dealloc { 
    [myLabel release]; // triggers dealloc 
} 
+0

謝謝你的僞代碼,我的理解是一樣的。從這個[討論](http://stackoverflow.com/a/7729141/691626),它有一個鏈接到蘋果的文檔,子視圖(myLable在我的例子中)應該有弱引用。看起來,Apple仍然建議對子視圖提供較弱的參考,儘管在實施中不會出現邏輯錯誤和強烈的參照。 –