0

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

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

谢谢!

4

2 回答 2

0

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

于 2011-09-17T21:03:04.333 回答
0

这让我觉得非常危险。可能会发生超出您控制范围的事情,需要重新绘制视图,例如出现通知或视图受到屏幕顶部的电话活动绿色条的影响。

我建议,如果您的层次结构中有这么多视图,那么会有很多其他性能问题发挥作用,因此在重绘后节省几个字节将是您的问题中最少的。

于 2011-09-17T21:23:20.063 回答