我意识到如果我从我的应用程序中相应地删除子视图,内存管理似乎更好(我的应用程序中有很多子视图)。
所以我的问题是必须删除您创建的所有子视图或其可选(当您的子视图非常少时,它不会对内存使用产生太大影响)?
我意识到如果我从我的应用程序中相应地删除子视图,内存管理似乎更好(我的应用程序中有很多子视图)。
所以我的问题是必须删除您创建的所有子视图或其可选(当您的子视图非常少时,它不会对内存使用产生太大影响)?
您会看到界面响应的显着跳跃,因为子视图实际上确实消耗了相当多的内存(与底层 CALayers 相比,UIView 非常昂贵),因此,调用-removeSubview
不仅可以减轻 GPU 的压力,还可以释放更多内存内存,因为子视图通常在之后被释放。
但是要回答您的问题:不。一旦视图脱离上下文或从子视图树中删除,它自己的子视图树就会被破坏,视图会在 ARC 环境中释放,然后为您销毁。即使没有 ARC,也没有必要。
这不是必须的,因为当持有视图的超级视图被删除时,它的所有子视图也被删除,你真的不需要担心删除视图,
我发现为我创建的每个子视图分配一个标签允许我在将来的某个时间点在删除超级视图之前将其删除,这使得根据标签值引入和取出元素变得简单。
视图上的每个对象都是一个子视图,因此当以简单的方式使用图形时,在某些应用程序上保留标签似乎是明智的。
假设您要绘制一条简单的水平线:
绘制水平线的函数的一部分:
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];
}
}