设置 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 的背景颜色会增加内存使用量的主要内容,如果未能解决你的问题,请参考以下文章

Swift - 设置UIView的背景色和背景图片

从 UIViewController 设置 UIView 的背景颜色

无法从 Controller 设置 UIView 背景颜色

设置 UIVIew 的背景颜色

仅为部分 UIView 设置背景颜色

无法设置 UIView 的背景颜色 Swift 5