在我的應用程序中,我有一個UIViewController子類(簡稱VC),我只在整個應用程序中的一個地方使用它。在那個地方,我一直在創造和推動它是這樣的:不在靜態UIViewController子類中調用[super dealloc]
MyViewController* VC = [MyViewController new];
[self.navigationController pushViewController:VC animated:YES];
[VC release];
,但我在想,因爲這是我使用的這種類型的視圖控制器的唯一的地方,我可以做這樣的事情,因此使用不會每次視圖控制器被壓入堆棧時重新設置:
static MapsToSendPicker* VC = nil;
if(!VC) {
VC = [MapsToSendPicker new];
}
[self.navigationController pushViewController:VC animated:YES];
[VC release];
與代碼的問題是,在VC的dealloc
方法,我釋放我所有的實例變量,並將其設置爲nil,最後我打電話給[super dealloc]
。這將釋放靜態視圖控制器,但測試if(!VC)
未被評估爲真(如果是這樣,則會破壞整個想法的目的;然後,每次都必須重新創建視圖控制器)。
我的溶液覆蓋在MyViewController的dealloc
方法和不調用[super dealloc]
在末端。這是有效的,但編譯器提出警告。我怎樣才能擺脫這種警告,同時保持我用這種設計獲得的功能?謝謝!
編輯:
快速谷歌搜索後,我發現這個解決方案:
- (void)dealloc {
if(NO) {
[super dealloc];
}
}
但我想的東西一點點... ...清潔。有什麼想法嗎?
快速谷歌搜索後,你發現**完全錯誤的答案**。這個「解決方案」最好是內存泄漏。 – bbum