首页 > 解决方案 > UIImageView.animationImages 后如何清除内存?

问题描述

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

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

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

任何的意见都将会有帮助。谢谢!

标签: iosiphoneswiftanimationmemory

解决方案


1.不要隐式缓存图像

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

该方法缓存图片,见: https ://developer.apple.com/documentation/uikit/uiimage/1624146-init

苹果建议:

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

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

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

那里还提到:

此方法不缓存图像对象。

2.不要持有对图像的引用

当您将图像加载到本地数组中时,请确保将其清空。

self.imageArray = []

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

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

快速验证 Instruments 中的分配:

Instruments 中的分配

如您所见,内存已被回收。都好。


推荐阅读