我試圖鎖定我對Objective-C中適當內存管理的理解。dealloc期間自我使用的解釋?
我養成了明確聲明self.myProperty
而不僅僅是myProperty
的習慣,因爲偶爾遇到一個屬性不會被設置爲我想要的引用的情況。
現在,我正在閱讀關於發佈IBOutlets
的Apple文檔,並且他們說在dealloc
期間應將所有網點設置爲nil
。所以,我把這個地方如下,經驗豐富的崩潰的結果:
- (void)dealloc {
[self.dataModel close];
[self.dataModel release], self.dataModel = nil;
[super dealloc];
}
於是,我試着取出「自我」的引用,就像這樣:
- (void)dealloc {
[dataModel close];
[dataModel release], dataModel = nil;
[super dealloc];
}
這第二個系統似乎按預期工作。但是,這讓我有點困惑。爲什麼在這種情況下self
會導致崩潰,當時我認爲self
是一個比其他任何東西更形式化的比較溫和的參考?另外,如果self
在這種情況下不合適,那麼我不得不問:什麼時候應該包含self
引用,以及何時不應該?
所以是這樣說,當你在上面合成的屬性的實現,僅僅在dealloc方法中將其設置爲零就足夠了? – bigmac 2010-06-08 18:21:54
不要使用self.dataModel = nil,只需使用[dataModel release] ;.通過訪問器將屬性設置爲零可能會導致通知被觸發。您不希望任何通知在dealloc期間觸發,因爲您的對象正處於被銷燬的過程中。 – 2010-06-08 19:50:46