如何删除UIView子视图w / out强制重绘?

时间:2011-09-17 20:30:50

标签: iphone uiview bitmap redraw cglayer

这有点像一个假设的问题,但我可以想象这种情况将在未来的某个时刻出现:让我们暂时假设我有一个非常复杂的UIViews层次结构,我只需要渲染一次。我们还假设,一旦绘制,我就不再使用父视图下面的信息(UIImages,标签,自定义视图,坐标等)。它不是保留它们,而是在避免重绘时释放它们使用的所有额外内存。结果与绘制到屏幕外缓冲区然后将其推送到屏幕上相同。是否有可能使用UIView / CGLayer开箱即用,或者是将父CGLayer的内容转换为UIImage的唯一选项?

好奇。我想在大多数情况下,保留一些额外视图的开销可以忽略不计,但内存是内存,除了分配位图之外,我还没有在官方文档中找到任何内容。

谢谢!

2 个答案:

答案 0 :(得分:0)

我可以考虑覆盖-(void)drawRect:(CGRect)rect;方法,在根据某个布尔标志将该图像移动到屏幕之前仅向屏幕外绘制一次,但它可能会导致一个可怕的错误并且应该被正确地设计。另一件事是,它可能会导致覆盖-(void)layoutSubviews;,如果你覆盖了第一个就认为这可能是开销......

答案 1 :(得分:0)

这让我觉得非常危险。您无法控制的事情可能需要重新绘制视图,例如显示通知或视图受到屏幕顶部电话活动绿色条形图的影响。

我建议如果你的层次结构中有那么多的视图会有很多其他的性能问题发生,在重绘之后节省几个字节是你问题最少的。