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

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

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

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

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

    最佳答案

    1.不要隐式地缓存图像
    我猜您正在使用UIImage(named :)?
    此方法缓存图像,请参见:
    https://developer.apple.com/documentation/uikit/uiimage/1624146-init
    苹果建议:

    如果您有一个仅显示一次的图像文件,并且希望确保不会将其添加到系统的缓存中,则应该使用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
    
    快速验证工具中的分配:
    ios - UIImageView.animationImages之后如何清除内存?-LMLPHP
    如您所见,内存已回收。都好。

    10-08 05:46
    查看更多