2011-12-08 38 views
0

在我的mainViewController中,我添加了另一個ViewController的視圖。完成後我將刪除它的視圖。什麼是正確的方式來管理這個,我在哪裏可以釋放視圖控制器?Autoreleasing ViewController內存管理

mainVc.m 
-(void)showView { 

    helpPage *elementController = [[helpPage alloc] init]; 
    [self.view addSubview:elementController.view]; 

} 

helpPage.m 
-(void)removeView { 

    [self.view removeFromSuperview]; 

} 

回答

0

由於您在mainVc實例的控制器上調用了alloc init,該mainVc實例擁有釋放控制器。

當它調用addSubView時,它將保留視圖(並添加到視圖層次結構中),以及何時從超級視圖中刪除它,它將被釋放。在這一點上,當它發佈時,創建視圖的控制器仍然保留它。當兩人都發布了這個觀點後,它就會消失。

這裏有一個相關的SO職位:

Does UIView's addSubview really retain the view?

0

我認爲你正在尋找這樣的事情

mainVc.m 
-(void)showView { 

    helpPage *elementController = [[helpPage alloc] init]; 
    [self.view addSubview:elementController.view]; 
    [elementController release]; 

} 

helpPage.m 
-(void)removeView { 

    [self.view removeFromSuperview]; 

} 

當然,我還沒有看到你的代碼的其餘部分,使可能不是你正在尋找的東西。不過,就內存分配而言,任何時候你的某個東西,你必須稍後才能釋放它。在視圖和視圖控制器的情況下,一旦添加了該視圖或視圖控制器,您可以release「分配」的副本。「