迅速释放内存中的图像

时间:2017-07-18 06:36:28

标签: ios swift image memory

我创建了一个带有2个viewcontroller嵌入导航控制器的应用程序。第一个视图控制器只包含一个按钮(触发第二个视图控制器)和第二个视图控制器只包含一个带有一个高分辨率图像(300MB)的UIImageView。当它显示第二视图控制器时,内存占用大约300 MB并且我返回到第一视图控制器(popviewcontroller),内存使用量仍然消耗300MB。经过一些研究后,我猜想加载的图像仍然存储在缓存中并且不会被释放。所以我的问题是如何手动释放图像,以便内存使用率下降?

EDITED 大家好,回答我自己的问题。使用" autoreleasepool"会做的。

1 个答案:

答案 0 :(得分:1)

请你试试这种方式。如果图像的大小太大,请不要将其放在图像xcassets文件夹中。将它放在项目导航器中并将其用作路径。

            if let path = Bundle.main.path(forResource: image name in string, ofType: image format like "png" or "jpg"){
                if let image = UIImage(contentsOfFile: path){
                    imageView.image = image
                }else{
                    print(" No image found")
                }
            }else{
                print("No image path found")
            }

如果图像的大小很大,请不要这样使用

imageView.image = UIImage(named: image name)

根据苹果文档App doc。它没有释放使用记忆。它会缓存图像以供将来使用。使用 imageWithContentsOfFile:  要么 的init(contentsOfFile :)  创建图像对象的方法,其中初始数据不在包中。这些方法每次都会从磁盘加载图像数据,因此不应使用它们重复加载相同的图像。 如果您想了解详细信息here就是答案。