2009-07-22 80 views
5

我正在将一些UIViews加载到UIScrollView上,并试图追查他们为何使用如此多的内存。在使用Instruments消除一个过程之后,我发现设置视图的背景颜色会增加4倍的内存使用量。设置增加内存使用率的UIView的背景颜色

如果我没有设置背景颜色,内存使用量约为4.5megs。只要我将背景颜色设置为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的背景清晰?

+0

我有完全相同的问题。如果我没有设置清晰的背景颜色,则视图以黑色背景显示。你的解决方案是什么? – 2016-01-06 14:43:46

回答

12

UIView的所有实例(以及从它派生的类)都有一个关联的CALayer对象(通过图层属性访问)提供了UIView的视觉外观。 CALayer可以拥有它自己的位图,它可以与另一个CALayer对象(这是如何完成反射)共享一个位图,或者它可以没有位图。当一个UIView充当其他控件的容器时,它没有与它的图层相关联的位图,因此它使用的内存很少。只要你设置它的背景颜色,就必须创建该支持位图,以便可以呈现某些内容。如果UIView子类实现drawRect在视图中绘制一些图形,则会发生同样的情况。

因为全屏大小的视图消耗大量内存,所以当您实现基于UIScrollView的解决方案时,应该只加载显示的视图和两边的视图。不要预先创建它们的负载。

+0

这个答案帮助了我很多,我担心非常大的UIView(用作容器)的内存使用情况。 – ideawu 2015-02-05 13:00:24