2012-05-02 31 views
0

在我的應用程序中,我有一個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]; 
    } 
} 

但我想的東西一點點... ...清潔。有什麼想法嗎?

+0

快速谷歌搜索後,你發現**完全錯誤的答案**。這個「解決方案」最好是內存泄漏。 – bbum

回答

3

刪除[VC release];行並添加[super dealloc]回來。一切都會正常工作,dealloc永遠不會被調用。一般來說,您應該考慮使用NSUserDefaults來恢復VC屬性,而不是始終將控制器保持在內存中。

+0

我想你可能是對的 - 它是NSUserDefaults! –

相關問題