Ios 大量内存消耗:ImageIO\u jpeg\u数据

Ios 大量内存消耗:ImageIO\u jpeg\u数据,ios,swift,memory,parse-platform,memory-leaks,Ios,Swift,Memory,Parse Platform,Memory Leaks,我有一个TableViewController,它显示一个用户图像和每行输入的一些文本。此图像通过“CellForRowatineXpath”方法加载: 每次我重新打开应用程序并转到这个TableViewController时,Instruments都会向我显示一个新的“ImageIO_jpeg_Data”对象被创建,而旧的对象永远不会被释放。每个对象占用大约13 MB的内存。。。因此,经过几次迭代后,内存使用量将超过100 MB并继续…: . 在模拟器中触发低内存警告不会释放任何内存 谁能帮

我有一个TableViewController,它显示一个用户图像和每行输入的一些文本。此图像通过“CellForRowatineXpath”方法加载:

每次我重新打开应用程序并转到这个TableViewController时,Instruments都会向我显示一个新的“ImageIO_jpeg_Data”对象被创建,而旧的对象永远不会被释放。每个对象占用大约13 MB的内存。。。因此,经过几次迭代后,内存使用量将超过100 MB并继续…: .

在模拟器中触发低内存警告不会释放任何内存


谁能帮我释放内存吗?

你做错了两件事

首先,在将图像添加到单元格之前,请始终将图像缩小到实际显示大小。在内存中保留一个13MB的图像只是为了在单元格中显示该图像的缩略图版本,这是错误的

其次,此代码毫无意义,会给您带来麻烦:

        if error == nil {
            let image = UIImage(data: imageData!)
            cell.applicantImage.image = image
        }

请记住,单元格是重复使用的,因此在运行此代码时,
cell
指向的单元格可能不再存在于界面中,或者可能正在显示表的另一行(因为它被重复使用)。相反,将(缩小的)图像存储在数据模型中,然后重新加载该表。

所有图像在存储到数据库时都会进行预定标,每个图像消耗约20kbs。它们还可以使用IB中的一个UIViewContentMode选项进行缩放。我发现其中一个主要问题是通过
var mainbgimaView=UIImageView(image:Constants.mainBgImage)VC.view.addSubview(mainbgimaView)VC.view.sendSubviewToBack(mainbgimaView)为每个viewcontroller设置背景图像}
在viewDidLoad中。背景图像文件大小为26kb,但每次我重新打开应用程序时,都会从ImageIO中重新分配13MB。在每一个新出现的VC中。
        if error == nil {
            let image = UIImage(data: imageData!)
            cell.applicantImage.image = image
        }