第一次更改图像时 UIImageView 内存增加

Posted

技术标签:

【中文标题】第一次更改图像时 UIImageView 内存增加【英文标题】:UIImageView memory increases when changing image first time 【发布时间】:2018-09-03 05:36:21 【问题描述】:

一个演示项目 -

我有一个 UIImageView 和三个按钮。

每当我单击任何按钮时,我都会更改图像视图的图像。我的图片大小为 1242*1242。

问题:每次单击按钮时都会占用 5 MB 内存。例如,我点击了按钮 1,内存增加了 5 MB,然后我按下了按钮 2,内存增加了 5 MB。但是当我再次单击按钮 1 时,内存没有增加。

这是 UIImage 视图的常见行为吗? 实际上,我正在处理相框,每次应用新的帧内存都会增加。因此,在应用 30-40 帧后应用程序崩溃。

有人可以参考如何处理此类相框应用程序或 UIImagesView 占用内存的任何原因吗?

提前致谢!

【问题讨论】:

【参考方案1】:

是的@Amanpreet,我也有同样的行为。在仪器中进行调查时,我发现每次单击按钮加载新图像时都会分配一些内存作为 ImageIO-jpeg-data

---------解决方案---------- --------

在imageView中加载图片

UIImage(contentsOfFile: filePath!)

方法。现在你的内存大小不会每次都随着新图像而增加。

示例代码

@IBAction func loadOne(_ sender: UIButton) 
    let filePath = Bundle.main.path(forResource: "1", ofType: "jpg")
    imageView.image = UIImage(contentsOfFile: filePath!)


@IBAction func loadTwo(_ sender: UIButton) 
    let filePath = Bundle.main.path(forResource: "2", ofType: "jpg")
    imageView.image = UIImage(contentsOfFile: filePath!)



@IBAction func loadThree(_ sender: UIButton) 
    let filePath = Bundle.main.path(forResource: "3", ofType: "jpg")
    imageView.image = UIImage(contentsOfFile: filePath!)

我正在使用大小为 1920*1280 的图像,以前我的内存使用量增加了 41.6 MB51.5 MB, 59.5 MB, 67.5 MB,每次点击后,但采用上述解决方案后,内存使用量停留在50.4 MB

【讨论】:

非常感谢您的大力帮助 :)

以上是关于第一次更改图像时 UIImageView 内存增加的主要内容,如果未能解决你的问题,请参考以下文章

iPhone内存问题?

根据 UIPanGestureRecognizer 翻译值更改 UIImageView 中的图像

iOS UIImageView 内存没有在 ARC 上被释放

在运行时更改 UIImageView 中的图像

如何在 Swift 中检测 UIImageView 上的 UIImageView 更改或 KVO 炒锅

为啥当我在平移单元格时更改 UIImageView 的图像时,整个视图会重置一秒钟?