2012-12-10 172 views
2

我增加了ViewControllers查看作爲一個子視圖到另一個視圖控制器,添加ViewControllers的視圖子視圖

例子:

在FirstScreen視圖 - 控制我這樣做,

  [self.view addSubview:self.secondScreen.view]; 

,一旦我刪除它從FirstScreen我這樣做

  [self.secondScreen.view removeFromSuperView]; 
      self.secondScreen=nil; 

但雖然添加e子視圖ViewDidLoad方法被調用,但removeFromSuperView ViewDidUnLoad未被調用。

我的問題

1)我會在我的secondScreen所有物體會釋放一次,我實例self.secondScreen設爲零

2)它是安全的不喜歡,這樣我不會得到任何泄漏或內存警告

回答

2

假設您的應用的iOS 5.0支持以後,你需要將它同樣添加爲,

[self addChildViewController:self.secondScreen]; 
[self.view addSubview:self.secondScreen.view]; 

去除您可以使用removeFromParentViewController,然後從上海華刪除。支票apple documentation here.

ViewDidUnLoad已從iOS 6.0開始棄用,不會被調用。檢查the documentation here.

關於您的問題,

1)我會在我的secondScreen的所有對象都會得到解除了分配一次,我 實例self.secondScreen設爲零

一旦你與完成self.secondScreen類,一旦將其設置爲零,它將開始釋放此類中的對象。如果你使用ARC,你不必擔心釋放。操作系統將照顧這些事情。

2)它是安全的不喜歡,這樣我不會得到任何泄漏或內存 警告

是的,這是好的,如果你正在使用ARC。對於非ARC,你需要確保你已經在這個類中正確釋放了所有的變量。在這種情況下確保保持/釋放完全平衡。

+1

感謝您的解釋 –

+0

請參閱第16分鐘的WWDC 2011會議102「實現UIViewController遏制」。您不應該在控制器上使用這些方法,因爲他們沒有實現,因爲他們有孩子,他們沒有期望。 危險:「此方法僅用於由自定義容器視圖控制器的實現調用」 – MacMark

0

當視圖從ViewController中移除時,不會調用ViewDidUnload,它會在視圖從內存中卸載時調用。有關此iOS的文檔有以下警告:

從控制器的視圖釋放內存時調用。 (不建議使用iOS中6.0。視圖是在低內存不再清除 條件,所以這種方法不會被調用。)

注意「過時」而事實上,「這種方法不會被調用」。