设置 UIButton 背景图片会导致内存崩溃

Posted

技术标签:

【中文标题】设置 UIButton 背景图片会导致内存崩溃【英文标题】:Setting UIButton background image causes memory crash 【发布时间】:2013-11-12 23:25:31 【问题描述】:

更新: 或多或少解决了。尝试了最简单的解决方案(当然是最后一个),然后简单地将图像替换为另一个图像。果然,没有崩溃。仍然很好奇是什么原因造成的。但至少我知道我可以通过简单地插入另一个图像来修复它。我使用的那个是从剪贴画网站下载的,并在inkScape中进行了修改……也许它以某种方式损坏了。我可能永远不会知道,但感谢任何见解!

我从来没有遇到过这种情况,我尝试了三种方法(详情如下)并且有点难过。我在两种不同的设备上进行了测试,结果相同。

我有一个从 nib 加载的视图,其中包含一个带有常规 ole UIButton 作为子视图的图像视图。每次我设置该按钮的背景图像时,一旦加载父视图,我就会收到内存警告。然后当我点击按钮时,由于内存压力,我崩溃了(或者更确切地说,ios 杀死了我)。当我不设置图像时,一切正常。

我试过了: 1. 只需将图像设置在笔尖中。 2.在父视图WillAppear中,设置图片如下:

[button setBackgroundImage:[UIImage imageNamed:@"yellowPencil.png"]
 forControlState:UIControlStateNormal];

3。或者,像这样设置图像:

NSString *path = [[NSBundle mainBundle]pathForResource:@"yellowPencil" ofType: @"png"];
UIImage *pencil = [UIImage imageWithContentsOfFile:path];
[button setBackgroundImage:pencil forControlState:UIControlStateNormal];

方法 1 和 2 产生重复的内存警告,好像有什么在循环,当我点击按钮时崩溃。

方法 3 始终生成两个警告,并且在我点击按钮时由于内存压力而崩溃。

同样,将图像排除在等式之外可以解决问题。该图像是我在inkScape 中创建的PNG,大小正确,带有@2x 版本。

非常感谢任何帮助!

【问题讨论】:

你的 png 有多大? 44x44pts。 @2x 的文件大小为 26kb,较小的只有几 kb。 我看到你解决了这个问题。是的,我同意文件似乎已损坏且未正确加载。 【参考方案1】:

如果不需要 alpha 通道,最好使用 jpeg。

【讨论】:

嗯...我一直认为 png 是 iOS 的首选格式。不过,我正在使用 alpha 通道为不透明度设置动画。无论如何感谢您的提示!

以上是关于设置 UIButton 背景图片会导致内存崩溃的主要内容,如果未能解决你的问题,请参考以下文章

calc() 在背景位置设置时会导致 IE 9 崩溃

在 UITesting 期间导致内存警告和崩溃的背景图像

子类化 UIButton 并将 UILabel 添加到视图层次结构会导致 currentImage 压缩

Qwidget的背景颜色改变时程序随机崩溃

为uibutton背景图像iphone sdk设置渐变颜色(颜色)

UIButton:设置图像视图的背景(不设置图像)