2013-05-03 42 views
9

我想創造我的Objective-C類的一些清理代碼,通過覆蓋的dealloc:Objective-C的析構函數與ARC

-(void)dealloc { 
    //cleanup code 
    [super dealloc]; 
} 

雖然我不能這樣做,因爲[super dealloc]是由編譯器時,ARC禁止已啓用。有沒有其他的方法可以使用?

回答

22

Transitioning to ARC Release Notes(重點煤礦):

如果你需要管理比釋放實例變量的其他資源,您可以實現一個dealloc方法。您不必(實際上不能)釋放實例變量,但是您可能需要在系統類和其他未使用ARC編譯的代碼上調用[systemClassInstance setDelegate:nil]。

ARC 中的自定義dealloc方法不需要調用[super dealloc](它實際上會導致編譯器錯誤)。超鏈接是由編譯器自動執行的。

所以你可以使用ARC時做同樣的清理在dealloc,只是不叫super

5

當ARC處於活動狀態時,您不需要撥打[super dealloc]。 ARC會爲你做到這一點。或者,您可以使用prepareForDealloc方法,該方法允許您撥打super,並在基類中調用dealloc