2012-06-16 45 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]; 
    } 
}