imageWithContentsOfFile 内存问题

Posted

技术标签:

【中文标题】imageWithContentsOfFile 内存问题【英文标题】:imageWithContentsOfFile memory issue 【发布时间】:2015-05-14 06:41:09 【问题描述】:

我的项目具有图像共享功能。在此功能中,我的应用会询问用户您要共享哪个库。

我写了下面的代码来分配图像,从默认库/自定义库中检索。

设备默认库

imgVwMediaFile.image = [UIImage imageWithCGImage:[资产缩略图]; //(ALAsset *)资产

自定义库(图片位于 Documents/image/user)

imgVwMediaFile.image = [UIImage imageWithContentsOfFile:path]; //(NSString*)路径

应用程序在具有自定义单元格的集合视图中显示此图像。

当我选择应用程序自定义库时,会从 Documents 目录中检索图像,但 imagewithcontentofFile 占用大约 90 到 100 Mb 内存。

在其他情况下,当我选择应用程序默认库时,它不会消耗超过 8 或 10 Mb 的内存。

我为自定义库尝试了堆栈 Q/A 中的不同代码,但仍然存在内存问题。

-1-
CGImageRef iref = [[UIImage imageNamed:asset] CGImage] ;
imgVwMediaFile.image=[UIImage  imageWithCGImage:iref];
iref=nil

-2-
NSData *imageData = [[NSData alloc] initWithContentsOfFile:path];
imgVwMediaFile.image=[UIImage imageWithData:imageData];
imageData=nil

-3-
imgVwMediaFile.image=[UIImage imageNamed:path];

所以请指导我,我如何从文档目录加载图像?

在不增加内存负载的情况下从文档目录加载图像的最佳方法是什么?

【问题讨论】:

imageWithContentsOfFile 只是从资源包中加载图像,没有缓存....最好使用 imageWithContentsOfFile。 【参考方案1】:

问题是您保存到磁盘的图像很大,因此加载大量图像以显示在集合中会占用大量内存。您使用内置库中的缩略图,因此您会看到不同的结果。

理想情况下,您可以在自定义库中保存一个缩略图文件夹并显示这些缩略图,然后在选择图像时获取相应的全尺寸图像以使用(这是基本上所有照片库都使用的方法)。或者,您可以即时调整图像的大小,但基本上保证您的滚动很糟糕。

【讨论】:

嗨,谢谢。我为我的自定义库图像制作了一个缩略图,现在它摇摆不定,不消耗内存。【参考方案2】:
    UIImage *img = [UIImage imageWithContentsOfFile:path];

【讨论】:

以上是关于imageWithContentsOfFile 内存问题的主要内容,如果未能解决你的问题,请参考以下文章

imageWithContentsOfFile 返回 nil 和 imageWithData 返回 nil

imageWithContentsOfFile 内存问题

imageNamed和imageWithContentsOfFile区别

[UIImage imageWithContentsOfFile:@""] 内存警告

iOS 加载图片选择imageNamed 方法还是 imageWithContentsOfFile?

第3月30天 UIImage imageWithContentsOfFile卡顿