郝萌主倾心贡献,尊重作者的劳动成果,请勿转载。

假设文章对您有所帮助。欢迎给作者捐赠,支持郝萌主,捐赠数额任意。重在心意^_^

我要捐赠: 点击捐赠

Cocos2d-X源代码下载:点我传送

普通情况下,载入图片都例如以下:

myImage = [UIImage imageNamed:@"icon.png"];

这样的方法在一些图片非常少,或者图片非常小的程序里是ok的。

可是,在大量载入图片的程序里,请千万不要这样做。

为什么呢 ???????

这样的方法在application bundle的顶层目录寻找由供应的名字的图象 。

假设找到图片。装载到iPhone系统缓存图象。那意味图片是(理论上)放在内存里作为cache的。

试想你图片多了。是什么后果``````

图片cache极有可能不会响应 memory warnings and release its objects

所以。用图片的时候一定要小心的alloc和release

推荐使用

NSString *path = [[NSBundle mainBundle] pathForResource:@”icon” ofType:@”png”];

myImage = [UIImage imageWithContentsOfFile:path];

用UIImage载入图像的方法非常多,最经常使用的是以下两种:

1、用imageNamed函数

[UIImage imageNamed:ImageName];

2、用NSData的方式载入,比如:

NSString *filePath = [[NSBundle mainBundle] pathForResource:fileName ofType:extension];

NSData *image = [NSData dataWithContentsOfFile:filePath];

[UIImage imageWithData:image];

因为第一种方式要写的代码比較少,可能比較多人利用imageNamed的方式载入图像。

事实上这两种载入方式都有各自的特点。

1)用imageNamed的方式载入时,系统会把图像Cache到内存。

假设图像比較大,或者图像比較多,用这样的方式会消耗非常大的内存,并且释放图像的 内存是一件相对来说比較麻烦的事情。比如:假设利用imageNamed的方式载入图像到一个动态数组NSMutableArray,然后将将数组赋予一 个UIView的对象的animationImages进行逐帧动画,那么这将会非常有可能造成内存泄露。并且释放图像所占领的内存也不会那么简单。

可是利 用imageNamed载入图像也有自己的优势。对于同一个图像系统仅仅会把它Cache到内存一次,这对于图像的反复利用是很有优势的。

比如:你须要在 一个TableView里反复载入相同一个图标,那么用imageNamed载入图像,系统会把那个图标Cache到内存,在Table里每次利用那个图 像的时候,仅仅会把图片指针指向同一块内存。这样的情况使用imageNamed载入图像就会变得很有效。

2)利用NSData方式载入时,图像会被系统以数据方式载入到程序。

当你不须要重用该图像。或者你须要将图像以数据方式存储到数据库,又或者你要通过网络下载一个非常大的图像时,请尽量使用imageWithData的方式载入图像。

不管用哪种方式载入图像,图像使用结束后,一定要记得显示释放内存。

郝萌主倾心贡献,尊重作者的劳动成果,请勿转载。

假设文章对您有所帮助。欢迎给作者捐赠,支持郝萌主,捐赠数额任意,重在心意^_^

我要捐赠: 点击捐赠

Cocos2d-X源代码下载:点我传送

版权声明:本文博主原创文章。博客,未经同意不得转载。

imageNamed 与 imageWithContentsOfFile差额的更多相关文章

  1. imageNamed和imageWithContentsOfFile区别

    在 Apple 官方帮助文档提供了两个加载图片的方法 imageNamed , 其参数为图片的名字 imageWithContentsOfFile , 其参数是图片文件的路径 下面主要是说一下他们的区 ...

  2. imageNamed、imageWithContentsOfFile、imageWithData

    [UIImage imageNamed:ImageName]; 1.加载图片占据的内存较大 2.相同的图片只会加载一份到内存中,如果同时使用,使用同一个对象即可 3.当对象销毁,图片对象不会随着一起销 ...

  3. imageNamed 与 imageWithContentsOfFile的区别

    如题,是不是大家为了方便都这样加载图片啊 myImage = [UIImage imageNamed:@"icon.png"];那么小心了这种方法在一些图片很少,或者图片很小的程序 ...

  4. UIImage imageNamed 与 imageWithContentsOfFile的差别

    [UIImage imageNamed:]仅仅适合与UI界面中的贴图的读取,较大的资源文件应该尽量避免使用 用UIImage载入本地图像最经常使用的是以下三种: 1.用imageNamed方法 [UI ...

  5. iOS imageNamed 与 imageWithContentsOfFile 的区别

    imageNamed 方法 1)后面的参数是icon的名字,图片可以存在项目中,也可以存在Asset中 2)该方法只适合一些中小型的图片读取,而一些比较大的资源图片并不适合用这个方法 3)这个方法加载 ...

  6. imageNamed 、imageWithContentsOfFile、 initWithContentsFile区别

    [UIImage imageNamed:]只适合与UI界面中的贴图的读取,较大的资源文件应该尽量避免使用 用UIImage加载本地图像最常用的是下面三种: 1.用imageNamed方法 [UIIma ...

  7. iOS imageNamed VS imageWithContentsOfFile

    今天 又学习了 一个 提高应用交互效率 降低内存的 小知识 结论: (1)mageNamed加载图片,并且把image缓存到内存里面, (2)imageWithContentsOfFile是只显示图片 ...

  8. imageNamed和imageWithContentsOfFile-无法加载图片的问题

    问题描述 图片资源放在Assets.xcassets中,分别用UIImage的类方法imageNamed和imageWithContentsOfFile获取图片对象,但发生奇怪的情况,前者获取到图片对 ...

  9. 【腾讯Bugly干货分享】微信读书iOS性能优化

    本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/578c93ca9644bd524bfcabe8 “8小时内拼工作,8小时外拼成长 ...

随机推荐

  1. Altium Designer如何重命名文件

  2. JavaScript中双叹号“!!”作用

    1.JavaScript的逻辑非(!)操作符的作用 (逻辑非) 如果操作数能够转换为true则返回false:否则返回true. 2.!!的作用 !!一般用来将后面的表达式强制转换为布尔类型的数据(b ...

  3. [Nuxt] Add Arrays of Data to the Vuex Store and Display Them in Vue.js Templates

    You add array of todos to the store simply by adding them to the state defined in your store/index.j ...

  4. js进阶 12-6 监听鼠标滚动事件和窗口改变事件怎么写

    js进阶 12-6 监听鼠标滚动事件和窗口改变事件怎么写 一.总结 一句话总结:滚动事件scroll(),浏览器窗口调整监听resize(),思考好监听对象. 1.滚动事件scroll()的监听对象是 ...

  5. GDB如何调试没有符号表(未加-g选项的编译)的程序

    /********************************************************************* * Author  : Samson * Date    ...

  6. zeros() 函数——MATLAB

    zeros函数——生成零矩阵 ones函数——生成全1阵 [zeros的使用方法] B=zeros(n):生成n×n全零阵. B=zeros(m,n):生成m×n全零阵. B=zeros([m n]) ...

  7. anaconda中实现双spyder版本

    1)先在conda中创建一个名为python2的环境,并下载对应版本python2.7 conda create --name python27 python=2.7 2)激活python2环境 ac ...

  8. 【翻译自mos文章】Clusterware间歇性的hang,命令报CRS-184而且Network Socket Files in /tmp/.oracle or /var/tmp/.oracle被删

    来源于: Clusterware Intermittently Hangs And Commands Fail With CRS-184 as Network Socker Files in /tmp ...

  9. Deepin下python安装uwsgi报错: Python.h:没有那个文件或目录

    解决方法是安装python-dev,这是Python的头文件和静态库包 正在读取软件包列表... 完成正在分析软件包的依赖关系树       正在读取状态信息... 完成       下列软件包是自动 ...

  10. IT忍者神龟之Hibernat持久化对象-数据表映射配置回想

    1.持久化对象POJO编写规则: 1) 有空參public构造器: 2) 提供标识属性.映射数据表主键: 3) 属性提供setter和getter方法. 4) 属性使用基本数据类型的包装类型.基本类型 ...