【问题标题】:imageWithContentsOfFile memory issueimageWithContentsOfFile 内存问题
【发布时间】: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。

标签: ios objective-c memory-management uiimage


【解决方案1】:

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

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

【讨论】:

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

【讨论】:

    猜你喜欢
    • 2012-07-09
    • 1970-01-01
    • 1970-01-01
    • 2010-09-22
    • 2014-12-19
    • 2021-10-06
    • 2015-05-03
    • 2012-07-22
    • 2016-03-25
    相关资源
    最近更新 更多