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)