2011-01-28 35 views
3

我不打算進入哪一個被調用的時間和原因。 (已經有很多了)代碼冗餘...我應該在dealloc中調用viewDidUnload

既然我們不能依靠viewDidUnloaddealloc之前被調用,我發現自己在這些方法之間有很多重複的代碼。

- (void)viewDidUnload { 
     [super viewDidUnload]; 
     self.foo = nil; 
     self.bar = nil; 
} 

- (void)dealloc { 
     [super dealloc];   
     [foo release]; 
     [bar release]; 
     [abc release]; 
} 

冗餘代碼,ick。任何人都知道更多這樣做的問題?

- (void)viewDidUnload { 
     [super viewDidUnload]; 
     [foo release]; 
     foo = nil; 
     [bar release]; 
     bar = nil; 
} 

- (void)dealloc { 
     [super dealloc]; 
     [self viewDidUnload]; 
     [abc release]; 
} 

當然,我得[super viewDidUnload]額外的呼叫,但我想,這是一個非問題,因爲它只是做這將在dealloc已經完成反正東西。我也換了viewDidUnload,所以它沒有使用訪問器。

+0

另外,如果你的父控制器也在做一些卸載,你應該在你的dealloc方法中調用[super dealloc],最後調用[super viewDidUnload]。我們有一些奇怪的錯誤是因爲首先調用[super dealloc] ....(而負載方法則相反 - 在執行其他操作之前調用[super load])。 – bandejapaisa 2011-10-10 11:41:36

回答

2

我將我的deallocs和nil集分解爲-releaseOutlets方法。 (我在這裏放置的不僅僅是發佈商店,這對我來說只是歷史。)然後從每個方面調用該方法。不要從dealloc中調用viewDidUnload,這是未定義的行爲,並隨時可能更改。

5

我不能確定它是否是安全的反覆調用viewDidUnload,但沒有什麼從分解出釋放/ nilling到您來自viewDidUnloaddealloc調用第三個方法阻止你。

+0

我正在考慮作爲一個選項。我只是不知道是否需要中間人的方法,或者我可以跳過它並降低複雜性。 – DBD 2011-01-28 16:29:16