UIImage 导致我的应用程序崩溃:收到内存警告

Posted

技术标签:

【中文标题】UIImage 导致我的应用程序崩溃:收到内存警告【英文标题】:UIImage causing my app to crash: Received memory warning 【发布时间】:2013-10-29 20:46:20 【问题描述】:

自从我将设备升级到 ios7 后,我收到了很多警告

2013-10-29 15:20:16.592 App Name[3820:60b] Received memory warning.
2013-10-29 15:20:16.695 App Name[3820:60b] Received memory warning.
2013-10-29 15:20:22.711 App Name[3820:60b] Received memory warning.

然后我的应用崩溃了

由于内存压力而终止

似乎是导致错误的背景图像:

- (void)viewDidLoad
  [super viewDidLoad];
     //This will cause problems if I uncomment
    //self.view.backgroundColor = [UIColor colorWithPatternImage:
    //                            [UIImage imageNamed:@"background.png"]];
  

奇怪的是它不会发生在模拟器上,只会发生在设备上。

【问题讨论】:

图片有多大?这是针对您升级到 iOS 7 的吗? @Wain 我用高分辨率制作了一个新背景,所以它也可以在我的 iPad 应用程序中使用。 所以你要在 iPhone 上加载 @2x iPad 背景? 【参考方案1】:

在较小/较旧的设备上加载大图像并不顺利。您应该为使应用程序可用的设备/分辨率命名图像,并在运行时加载适当的图像。 iOS 会为您处理分辨率(如果您遵循命名标准),但对于一般图像,您需要自己处理平台部分。为此,请结合使用[[UIDevice currentDevice] userInterfaceIdiom][UIScreen mainScreen].bounds

例如(在最基本的层面上不区分 iPhone 屏幕尺寸):

background_iPhone.png
background_iPhone@2x.png
background_iPad.png
background_iPad@2x.png

此外,如果您可以使用磁贴作为应用的背景,请执行此操作。这是指定图像的最有效方式,SDK 会为您平铺。

【讨论】:

好吧,这是有道理的,但是我应该如何命名它们,你能添加一个例子吗,我也不明白瓷砖/背景的建议,你介意添加代码示例吗? 如果您使用的是全尺寸图像,您应该在其他视图后面添加一个图像视图,而不是使用图案颜色。 谢谢,是背景图,怎么弄啊,应该占全屏 取决于您的应用程序的结构以及它应该显示在哪些屏幕上。导航控制器视图上的图像视图和以透明背景推入的每个视图可能... 是的,我意识到 colorWithPattern 占用了大量内存,我想听听您的建议,我的应用程序嵌入在导航控制器中,但我无法在其上拖放 imageView。

以上是关于UIImage 导致我的应用程序崩溃:收到内存警告的主要内容,如果未能解决你的问题,请参考以下文章

从相机点击多张图像时收到内存警告

使用大型UIImage数组时的内存问题导致崩溃(swift)

iOS4 调用 ImageNamed:仍然泄漏或导致内存问题?

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

应用程序崩溃 - 内存警告 Iphone SDK

应用程序收到内存不足警告但只有 5.7MB 的活动字节