设置 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 背景图片会导致内存崩溃的主要内容,如果未能解决你的问题,请参考以下文章
子类化 UIButton 并将 UILabel 添加到视图层次结构会导致 currentImage 压缩