5

我正在将一些 UIView 加载到 UIScrollView 上,并试图找出它们使用如此多内存的原因。在使用 Instruments 进行消除过程后,我发现设置视图的背景颜色会使内存使用量增加 4 倍。

如果我不设置背景颜色,则内存使用量约为 4.5 兆。一旦我将背景颜色设置为任何 redColor 或 clearColor ,内存使用量就会跳到 17megs。

这是代码:

ThumbnailView *thumbView = [[ThumbnailView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 225.0f, 320.0f)];
thumbView.tag = aCounter;
thumbView.backgroundColor = [UIColor clearColor];

有谁知道这可能是什么原因造成的?

我真正追求的是背景清晰。如果没有办法解决这个问题,是否有另一种方法可以将 UIView 的背景设置为清晰?

4

1 回答 1

12

UIView 的所有实例(以及从它派生的类)都有一个关联的 CALayer 对象(通过 layer 属性访问),该对象提供 UIView 的视觉外观。CALayer 可以有它自己的位图,它可以与另一个 CALayer 对象共享一个位图(这是完成反射的方式),或者它可以没有位图。

当 UIView 充当其他控件的容器时,它没有与其层关联的位图,因此它使用的内存非常少。一旦您设置了它的背景颜色,就必须创建该支持位图,以便有一些东西可以渲染。如果 UIView 子类实现 drawRect 将一些图形绘制到视图中,也会发生同样的事情。

因为全屏视图会消耗大量内存,所以当您实现基于 UIScrollView 的解决方案时,您应该只加载显示的视图以及两侧的两个视图。不要提前创建大量它们。

于 2009-07-22T12:38:16.793 回答