设置 UIView 的背景颜色会增加内存使用量
Posted
技术标签:
【中文标题】设置 UIView 的背景颜色会增加内存使用量【英文标题】:Setting background colour of a UIView increasing memory usage 【发布时间】:2010-11-12 22:59:47 【问题描述】:我正在将一些 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 的背景设置为清晰?
【问题讨论】:
我也有同样的问题。如果我没有设置清晰的背景颜色,那么视图会显示为黑色背景。你的解决方案是什么? 【参考方案1】:所有 UIView 实例(以及从它派生的类)都有一个关联的 CALayer 对象(通过 layer 属性访问),该对象提供 UIView 的视觉外观。 CALayer 可以有它自己的位图,它可以与另一个 CALayer 对象共享一个位图(这是完成反射的方式),或者它可以没有位图。
当 UIView 充当其他控件的容器时,它没有与其层关联的位图,因此它使用的内存非常少。一旦您设置了它的背景颜色,就必须创建该支持位图,以便有一些东西可以渲染。如果 UIView 子类实现 drawRect 将一些图形绘制到视图中,也会发生同样的事情。
由于全屏视图会消耗大量内存,因此当您实现基于 UIScrollView 的解决方案时,您应该只加载显示的视图以及两侧的两个视图。不要提前创建大量它们。
【讨论】:
这个答案对我帮助很大,我担心非常大的 UIView(用作容器)的内存使用情况。以上是关于设置 UIView 的背景颜色会增加内存使用量的主要内容,如果未能解决你的问题,请参考以下文章