2012-06-16 80 views
2

我意識到,如果我從我的應用程序相應地刪除子視圖,存儲管理似乎更好(我有我的應用程序中的很多子視圖)。爲什麼要刪除子視圖?

所以我的問題是,這是一個必須要刪除已創建的所有子視圖或者其可選的(當你有非常小的子視圖,因此不會影響內存使用多少)?

回答

3

你看到在界面明顯的跳躍響應,因爲子視圖不實際消耗相當多的內存(UIViews是非常昂貴的相比,其潛在的CALayers),因此,呼籲-removeSubview不僅卸載從GPU的壓力,同時也釋放了作爲子視圖通常釋放更多的內存之後。

但是要回答你的問題:不是。一旦視圖已經超出上下文或從子視圖樹中移除,它自己的子視圖樹就會被破壞,視圖在ARC環境中釋放,然後被破壞。即使沒有ARC,也沒有必要。

2

這不是必須的,因爲當持有鑑於超視圖被刪除其所有子視圖被刪除過,你真的不需要擔心刪除意見,

+0

隨着你和codaFi解釋,是否意味着我只需要調用的的UIView removeFromSuperview? – user1460951

+0

不要叫它superview會自動調用它的所有子視圖 –

0

我發現,對分配給我創建的每個子視圖標籤可以讓我在未來的某個時刻的上海華被刪除之前刪除它,使得它帶來簡單和縮小元件根據其標籤值。
視圖上的每個對象都是一個子視圖,因此保持當圖形以簡單的方式使用他們的標籤似乎是合理的某些應用。

比方說,你想畫一個簡單的水平線:一段時間後

CGFloat lineWidth=8; 
UIView *lineView = [[UIView alloc]initWithFrame:CGRectMake(oxx,oyy-(lineWidth/2),pxx+(lineWidth/2),pyy)]; 
lineView.backgroundColor = colours; 
lineView.tag=5; 
[self.view addSubview: lineView]; ... 

然後,去掉一些標記子視圖:

功能的

部分畫一條水平線

for (UIView *subview in [self.view subviews]) { 
    if (subview.tag == 101 || subview.tag == 102 ||subview.tag == 103 ||subview.tag == 104 || subview.tag == 5) { 
     [subview removeFromSuperview]; 
    } 
}