2012-01-06 84 views
0

我有UIViewController誰擁有幾個子視圖,但跟蹤每分配每個子視圖是困難的任務,因爲實際編碼器不是我的,需要處理的內存消耗。UIViewControllers ...內存管理使用子視圖

我的問題是有沒有一種方法來控制內存調用遞歸函數來刪除和釋放UIViewController中的所有子視圖,而無需知道實際的引用名稱?

如下面的代碼:

for (UIView* subview in view){ 
    [subview removeFromSuperView]; 
    [subview release] ; 
    subview = nil; 
} 
+0

什麼是錯的代碼片段你貼? – jv42 2012-01-06 10:49:16

回答

2

當您在查看呼叫removeFromSuperview它會自動遞減保留計數(因爲上海華不再需要您剛剛刪除的視圖的引用)。

如果您已將欣賞到上海華以標準的方式,不應該有任何需要做的,你在做什麼 - 無論你添加你的意見,然後釋放了他們,或者你的觀點是性能和該發佈稍後發生。

您提出的代碼(所有子視圖上的遞歸循環)是壞主意,因爲您實際上不知道您的子視圖是否可以安全地發佈。您可能很容易觸發不良訪問。

+1

添加到@lxt,'removeFromSuperview'將遞減保留計數,但並不能保證它會成爲零。當你的'MainView'(你從上面的循環調用的地方)將被釋放時,它會釋放它的子視圖(視圖保留下來的)。 for循環是不需要的。 – 2012-01-06 11:24:25

+0

很好,趕上! – lxt 2012-01-06 11:28:26

+0

可以共享此removeFromSuperView – Kingkong 2012-01-06 14:06:45