如何在UIImageView.animationImages之后清除内存?

时间:2018-06-03 16:59:57

标签: ios iphone swift animation memory

我创建了一个只有以下内容的新Xcode项目:

  • 从png中创建一个UIImage数组的代码被拖入项目中(我在将数据附加到数组时尝试了UIImage(命名:)和UIImage(contentsOfFile :))
  • 一个UIImageView
  • 设置imageView.animationImages = arrayOfImages并调用imageView.startAnimating()的按钮

按下按钮并播放动画时,内存使用量会增加150-200MB,具体取决于图像阵列中的图像数量。然后内存使用量保持在该水平。

设置imageView.animationImages = nil不清除内存。我该如何清理那段记忆呢?

任何建议都会有所帮助。谢谢!

1 个答案:

答案 0 :(得分:3)

1。不要隐含地缓存图像

我猜你正在使用UIImage(名为:)?

此方法缓存图像,请参阅: https://developer.apple.com/documentation/uikit/uiimage/1624146-init

Apple建议:

  

如果您的图像文件只显示一次并希望确保它不会添加到系统的缓存中,则应使用imageWithContentsOfFile创建图像:这会将您的一次性图像保留在系统图像缓存之外,从而可能会改善应用程序的内存使用特性。

因此使用'UIImage(contentsOfFile:String)'可以解决您的问题。由于您需要提供图像路径的文档,因此图像名称不足,请参见此处:

https://developer.apple.com/documentation/uikit/uiimage/1624123-imagewithcontentsoffile

还有人提到:

  

此方法不会缓存图像对象。

2。不要保留对图像的引用

当您将图像加载到本地阵列时,请确保将其清空。

self.imageArray = []

3。将imageView.animationImages设置为空数组

self.imageArray = []
self.imageView.animationImages = self.imageArray

快速验证仪器中的分配:

allocations in Instruments

正如您所看到的,内存已被回收。一切都好。