2011-04-14 25 views
0

在蘋果的< Memory Management>談論出口時的文件。是否需要在dealloc中設置outlet變量爲零(即使在IOS 3.0之後)?

它說

在自定義視圖控制器類 可以實現vi​​ewDidUnload到 調用您的存取方法來設置 網點零

我能理解這一點,因爲在這種情況下調用存取方法來設置爲零將釋放對象並設置指針爲零,可以防止無效的值,可能引起死機的訪問。

但在那之後,它說:

注:在iOS 3.0之前,該 viewDidUnload方法不可用。 相反,你應該設置網點零 中的setView:,在這個 例所示:

- (void)setView:(UIView *)aView { 
    if (!aView) { // View is being set to nil. 
     // Set outlets to nil, e.g. 
     self.anOutlet = nil; 
    } 
    // Invoke super's implementation last. 
    [super setView:aView]; 
} 

此外,由於 一個細節的dealloc的實施 UIViewController中,你還應該設置 出口變量零在dealloc中:

- (void)dealloc { 
    // Release outlets and set outlet variables to nil. 
    [anOutlet release], anOutlet = nil; 
    [super dealloc]; 
} 

1)爲什麼即使在dealloc中,我們需要設置爲零? (我認爲dealloc是對象生命週期的最後一步,沒有人可以通過這個對象訪問插座。)

2)我們還需要在iOS 3.0或更高版本中設置nil嗎?(我發現代碼自動生成的Xcode不會將零設置爲零,只能釋放它們。)

回答

2

不,您不需要設置您的零售店爲零在dealloc。只要確保你釋放它們。

相關問題