2010-01-29 30 views
0

我是iPhone開發新手,在從主窗口中刪除子視圖時遇到問題。問題是,即使在調用removeFromSuperview之後,視圖仍然顯示出來。爲什麼removeFromSuperview在我的iPhone應用程序中隱藏我的UIView?

子視圖中創建,並通過該代碼添加到顯示樹:

// Instantiate the controller for the authentication view 
AuthenticationController* controller = [AuthenticationController alloc]; 
[controller initWithNibName:@"AuthenticationView" bundle:[NSBundle mainBundle]]; 
authController = controller; 

// Add the authentication view to the window 
[[stateManager appWindow] addSubview:[authController view]]; 

後來的後來,我已經驗證了這個碼是設置一個斷點運行,這是我是如何試圖刪除的觀點:

[[authController view] removeFromSuperview]; 

在如此重要的情況下,這裏的dealloc的代碼,不會針對該視圖控制器的所有者:

- (void)dealloc { 
    [authController release]; 
    [super dealloc]; 
} 

什麼導致這個子視圖繼續顯示?

回答

0

我得到了這個工作。顯然,一個視圖在它被釋放之前不會消失,而且我對這個平臺上的內存管理如何工作產生誤解。這裏是我更正的代碼:

AuthenticationController* controller = [[AuthenticationController alloc] 
initWithNibName:@"AuthenticationView" bundle:[NSBundle mainBundle]]; 
controller.delegate = self; 
authController = controller; 
[controller release]; // <-- Problem was that a reference was being maintained 
[[stateManager appWindow] addSubview:[authController view]]; 
+4

這看起來不像應該工作。 'initWithNibName:'方法產生一個保留計數爲1的控制器。你爲它賦予'authController'(我假設它是一個實例變量)而不保留它。然後釋放它,將保留計數設置回零,並且應該釋放該對象。當你到達最後一行時,'authController'應該消失。 – 2010-02-03 05:09:00

+0

我不認爲你的評估是正確的。 'authController'是一個保留引用的屬性。因此,在我有'[controller release]'之前,對象的保留計數爲2,因此''dealloc''期間的'release'沒有釋放對象。 – Jacob 2010-02-03 17:39:30

+0

@Jacob - 這裏的修補是正確的。如果你打電話給self.authController = controller,你說的**會是真的。正如你所擁有的,你不是保留控制器,並且在訪問分配給authController的指針時將獲得無效的內存引用。 – DougW 2011-10-27 00:33:08

-1

不確定「show up」是什麼意思。在屏幕上?在記憶中?

你的「修復」看起來有問題,因爲alloc給了你一個引用,然後你釋放它,這就擺脫了AuthenticationController。然後你使用。

這看起來很有效,因爲在閱讀視圖之前沒有人覆蓋控制器,但這只是要求麻煩。

+0

我的意思是顯示在屏幕上。 – Jacob 2010-02-03 17:36:35

+0

我不認爲你的評估是正確的。在我的代碼中,'authController'是一個保留引用的屬性。因此,在我有'[controller release]'之前,對象的保留計數爲2.因此,在''dealloc''期間的'release'並沒有釋放對象。 – Jacob 2010-02-03 17:40:57

+0

嗯,我們沒有ESP,這讓我們兩個人認爲這是一個實例變量(因爲您將它作爲一個版本使用)。 如果是屬性,則將其設置爲零而不是釋放。 – 2010-02-06 01:40:17

相關問題