2010-09-08 54 views
2

嘿,夥計們,再次擊敗內存管理(死)馬抱歉。我知道這個問題已經在SO上多次提出過,但我覺得所有的問題仍然缺乏兩條信息。讓我提出一些我知道爲了挽救每個人的時間。內存管理與視圖控制器中的插座和屬性

1)當您創建IBOutlet時,您的視圖控制器會自動保留此插座。 1a)當你不創建插座時,'框架'(筆尖?)爲你釋放你的對象(如uilabels或uiviews)。 2)當你做self.myOutlet = nil時,你可以有效地釋放出口(假定你正確地合成了你的屬性)。這是因爲setter釋放插座並將其分配給nil。

我不知道是什麼:

1)主要問題:如果你做self.myOutlet =零在viewDidUnLoad,你仍然需要做的dealloc在什麼?你可以假設viewDidUnload總是在dealloc之前調用嗎?(因此你的保留視圖被釋放?)

2)如果你沒有合成該插座的屬性,會發生什麼?該框架不應該自動釋放它嗎?(因爲你沒有retain屬性)如果你必須釋放它,你怎麼做它以及在哪裏(在viewDidUnload或dealloc中)?

如果有什麼不對,請告訴我。任何澄清都是非常有幫助的。

回答

1

(#1)蘋果文檔說做到既

另外,由於dealloc中的UIViewController中執行的細節,你還應該設置插座變量爲nil在dealloc中:

http://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/MemoryMgmt/Articles/mmNibObjects.html

(#2)如果你不合成的屬性,你還需要做出一個屬性,它更好地保留 - 閱讀的鏈接。 UI對象被創建,autoreleased和outlet屬性被設置(它應該保留)。因爲他們已經發布了他們本應該發佈的版本 - 你保留了,所以你必須發佈(在viewDidUnload和dealloc中)

+0

hi lou,謝謝你的回覆: – Ying 2010-09-09 12:50:48

+0

hi lou,感謝您的迴應:我很困惑,因爲關於在dealloc中將outlet變量設置爲零的引用在本節中是這樣說的: 「注意:在3.0之前的iOS中...您應該在setView:中將網點設置爲零在這個例子中舉例說明:「 然後它說,就像你上面引用的那樣,」另外....「那麼這是不是iOS 3.0前的細節的一部分? 所以我從這裏拿走了,當你有一個保留的屬性,在viewDidUnload和dealloc期間,你必須做self.outlet = nil,沒有其他東西來正確管理屬性。沒有物業沒有物業。這是正確的嗎? – Ying 2010-09-09 13:01:46

+0

我對該說明的閱讀是,只有setView部分適用於iOS 3.0,因爲viewDidUnload不存在。第二部分是針對每個版本的。是的,爲IBOutlets使用@property。 – 2010-09-09 20:33:35

相關問題