博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
imageNamed与imageWithContentsOfFile对于图片应用程序内存的影响,不可小视
阅读量:5123 次
发布时间:2019-06-13

本文共 907 字,大约阅读时间需要 3 分钟。

  + (UIImage *)imageNamed:(NSString *)name方法是在application bundle的顶层文件夹寻找名字的图象 , 如果找到图片, 系统缓存图象。图片内容被加载到系统内存中,使用时直接引用到系统内存。

  所以当处理大量图片时,程序使用的内存会迅速上升导致内存警告并退出。

  特别在使用Interface Builder建立界面时,如果直接拖动UIImageView 并设置image的图片名称。InterfaceBuilder 正是通过UIImage 类的imageName方法加载图片。图片被缓存,导致内存使用较大。且无法释放,即使release掉 UIImageView也无济于事。

 

  为避免这种error,可以使用如下方法:

    NSString *path = [[NSBundle mainbundle] pathForResource:@" " ofType:@" "];

    UIImage *image = [UIImage imageWithContentsOfFile:path];

  当然,对于图片处理等相关程序,可以直接为UIImage写一个catagory,重载imageNamed方法,如下:

    @implementation UIImage(imageNamed_Hack) 

    + (UIImage *)imageNamed:(NSString *)name

     { 

      return [UIImage imageWithContentsOfFile:[NSString stringWithFormat:@"%@/%@", [[NSBundle mainBundle] bundlePath], name ] ];

    } 

    @end

 

  关于imageWithContentsOfFile方法的内部实现,有待进一步研究,也希望高手赐教。

转载于:https://www.cnblogs.com/kingOfPointer/archive/2012/08/23/2652069.html

你可能感兴趣的文章
Eclipse中SpringBoot项目POM文件报UnKnown的解决方案
查看>>
文件创建、查看、删除
查看>>
Python基础教程【读书笔记】 - 2016/7/19
查看>>
通过Servlet生成验证码图片(转)
查看>>
more命令(转)
查看>>
SwipeRefreshLayout + RecyclerView 实现 上拉刷新 和 下拉刷新
查看>>
warshall 求传递闭包 Cow Contest POJ - 3660
查看>>
css3学习笔记之渐变
查看>>
你会使用super()吗?你确定你了解它吗?
查看>>
【bzoj4825】[Hnoi2017]单旋 线段树+STL-set
查看>>
【小记】-003--a标签与 window.location.href 的区别
查看>>
python学习第十天列表的增加,修改,删除操作方法
查看>>
专题2(附篇):平面问题的差分解之差分公式的推导
查看>>
Vim命令
查看>>
pl/sql配置连接远程数据库oracle,本地没有安装oracle数据库的情况下
查看>>
PLSQL不好用,提示ora-12514 错误解决方法
查看>>
Struts中如何实现查询结果分页显示
查看>>
Mysql ibdata 丢失或损坏如何通过frm&ibd 恢复数据
查看>>
[Tips]解决HG之waiting for lock on repository
查看>>
css中的选择器
查看>>