首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在UIImageView.animationImages后清除内存?

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

Stack Overflow用户
提问于 2018-06-04 00:59:57
回答 1查看 1.7K关注 0票数 3

我已经创建了一个新的Xcode项目,它只包含以下内容:

  • 代码从拖入到项目中的png创建UIImages数组(在将图像追加到数组时,我尝试过UIImage(UIImages:)和UIImage(contentsOfFile:) )
  • a UIImageView
  • a按钮,该按钮设置imageView.animationImages = arrayOfImages并调用imageView.startAnimating()

当按下按钮并播放动画时,内存使用量将增加150-200MB,具体取决于图像阵列中的图像数量。则内存使用率将保持在该级别。

设置imageView.animationImages = nil不会清除内存。我该如何着手清除这些内存呢?

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-04 02:05:45

1.不要隐式缓存图片

我猜您使用的是UIImage(名为:)?

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

苹果公司建议:

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

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

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

这里还提到了:

此方法不缓存图像对象。

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

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

代码语言:javascript
复制
self.imageArray = []

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

代码语言:javascript
复制
self.imageArray = []
self.imageView.animationImages = self.imageArray

快速验证Instruments中的分配:

如你所见,内存被回收了。一切都很好。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50668841

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档