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
imageNamed和imageWithContentsOfFile区别
[UIImage imageWithContentsOfFile:@""] 内存警告