2010-08-21 81 views
0

我有被添加到當前視圖像這樣的viewController:釋放和重新分配一個viewController?

theDetail = [[detailController alloc] initWithNibName:@"detail" bundle:[NSBundle mainBundle]]; 
[self.view addSubview:theDetail.view]; 

現在 - 當用戶關閉這一新的觀點,我從上海華刪除它。

雖然用戶可能會點擊按鈕來顯示該視圖兩次。但是當我這樣做時,detailController第二次獲得了分配,我得到了兩個保留計數。

當我第一次發佈的DetailView,我獲得第二次點擊一個n錯誤...

任何人誰可以告訴我這樣做的正確方法?

回答

0

爲什麼不使用導航控制器來加載視圖?

+0

不要問這個問題 - 只是不要問它... :) – Swissdude 2010-08-22 00:36:29

+0

爲什麼我說錯了什麼? – alecnash 2010-08-22 00:39:21

0

我找到了解決辦法 - 想我真的應該重新閱讀有關內存管理的章節(又一次)...

訣竅是改變ALLOC線這樣的:

self.theDetail = [[[detailController alloc] initWithNibName:@"detail" bundle:[NSBundle mainBundle]] autorelease]; 

這與當前設置的«theDetail»交換一個新的,自動釋放舊的(如文檔清晰的狀態 - 誰可以閱讀有明確的優勢:)

0

我也建議使用導航控制器。

但是 - 如果你確定要做到這一點,我建議你存儲theDetail作爲一類範圍的變量,然後你可以使用類似以下內容:

if (theDetail == nil) { 
    theDetail = [[detailController alloc] initWithNibName:@"detail" bundle:[NSBundle mainBundle]]; 
    [self.view addSubview:theDetail.view]; 
} 
+0

我真的會建議這樣做而不是autorelease。 初始化一個對象需要處理能力,所以如果你不需要初始化一個新的對象,那麼不要...... – 2010-08-22 00:42:09