加载图片时iOS应用程序崩溃

时间:2017-12-09 00:56:32

标签: ios swift crash imageview

目标:

  1. 以编程方式将第一张图像(约94kb)从Assets.xcassets文件夹加载到主故事板中的ImageView中(参见下面的代码) - 效果很好
  2. 然后当您将第二张图片(相同尺寸)加载到原始UIImage中时,会导致iOS应用程序崩溃。
  3. 这是我的代码:

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

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

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

1 个答案:

答案 0 :(得分:0)

在阅读了SO和其他文章(见下文)的大量答案后,在将多个图像加载到动画数组中时管理内存的最佳方法是使用contentsOfFile: imageName而不是{{1 }}

请参阅此处的文章:

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

其次,Apple声明如下:

  

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

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

最后,收到内存警告后,您还可以创建以下功能:

UIImage(named:"FirstImage.png")

希望这有助于其他人:)