【问题标题】:iOS app crashes when loading an imageiOS 应用程序在加载图像时崩溃
【发布时间】:2017-12-09 00:56:31
【问题描述】:

目标:

  1. 以编程方式将第一张图片(大约 94kb)从 Assets.xcassets 文件夹加载到主故事板中的 ImageView 中(参见下面的代码) - 完美运行
  2. 然后,当您将第二张图片(相同大小)加载到原始 UIImage 中时,它会导致 iOS 应用崩溃。

这是我的代码:

mainImageView.image = UIImage(named:"FirstImage.png") // load first image, no issues

然后,如果您以编程方式将第二张图片加载到同一个 UIImage 中,则会导致设备抛出内存不足警告,并且 iOS 会导致应用崩溃:

mainImageView.image = UIImage(named:"SecondImage.png") // load second image

【问题讨论】:

  • 请向我们展示堆栈跟踪。
  • 显示更多关于第二张图片加载的代码。错误应该在其他地方

标签: ios swift crash imageview


【解决方案1】:

在阅读了一些关于 SO 和其他文章的答案(见下文)之后,在将多个图像加载到动画数组中时管理内存的最佳方法是使用 contentsOfFile: imageName 而不是 UIImage(named:"FirstImage.png")

在此处查看文章:

http://www.alexcurylo.com/2009/01/13/imagenamed-is-evil/

其次,Apple 声明如下:

如果匹配的图像对象不是 已经在缓存中,此方法定位并加载图像数据 从磁盘或可用资产目录,然后返回 结果对象。系统可能随时清除缓存的图像数据 释放内存。仅对位于 缓存但当前未使用。在 iOS 9 及更高版本中,此 方法是线程安全的。特殊注意事项 如果您有图片 仅显示一次并希望确保显示的文件 没有被添加到系统的缓存中,你应该创建你的 图片使用 imageWithContentsOfFile:。这将使您的一次性使用 系统图像缓存中的图像,可能会改善内存 使用应用的特性。

https://developer.apple.com/documentation/uikit/uiimage/1624146-init

最后,在收到内存警告后,您还可以创建以下函数:

func applicationDidReceiveMemoryWarning(application: UIApplication) {
        NSURLCache.sharedURLCache().removeAllCachedResponses()
    }

希望这对其他人有帮助:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-09-25
    • 1970-01-01
    • 1970-01-01
    • 2011-10-07
    • 2015-08-10
    • 1970-01-01
    相关资源
    最近更新 更多