iOS imageNamed VS imageWithContentsOfFile
今天 又学习了 一个 提高应用交互效率 降低内存的 小知识
结论:
(1)mageNamed加载图片,并且把image缓存到内存里面,
(2)imageWithContentsOfFile是只显示图片,但不加到内存中。
1 .通常 我们都是把 切图放在Images.xcassets 里面 然后 用 [UIImage imageNamed:@"XXX"] 来获取
过程:
加载图片 首先app 先会查系统缓存,如果没有 会遍历整个工程文件找到这个文件进行系统缓存,以备下次使用 并返回这个图片 没有这个图片 返回nil (而缓存何时释放 有系统决定)
这种方式适合 常用切图,(还有比如:UITableViewCell , UICollectionCell 等频繁加载同一个图标) 如果是有很多图片 图片又很大 会出现 "内存不足,内存泄露,甚至是程序的崩溃"
2 .对于大图片 比如 像引导页 那种 占了 几乎满屏的图 并且复用率很低 比较适合 imageWithContentsOfFile 方式
代码:
//全局宏 : 可以在 pch 文件中定义一个宏,在整个项目中使用
#define ResourcePath(path) [[NSBundle mainBundle] pathForResource:path ofType:nil]
#define ImageWithPath(path) [UIImage imageWithContentsOfFile:path]
调用
UIImage* image = ImageWithPath(ResourcePath(@"img.jpg"));//需要写出.png/.jpg
过程:
这个方法仅仅是加载这个图片 不会缓存.(每次都这样)
但是 使用这个方法去获取图片 应该放在 工程的"组"(group)里面 因为 ResourcePath 获取到资源文件路径,如果是"文件"(folder) 需要把这个folder的路径也添加上.
其他:
参考链接:
http://my.oschina.net/u/2458687/blog/515161
相关: 1.Images.xcassets中的素材 (1)只支持png格式的图片 (2) 图片只支持[UIImage imageNamed]的方式实例化,但是不能从Bundle中加载 (3) 在编译时,Images.xcassets中的所有文件会被打包为Assets.car的文件 2.UIImage imageNamed (1)在图片使用完成后,不会直接被释放掉,具体释放时间由系统决定,适用于图片小,常用的图像处理 (2)如果要释放快速释放图片,可以使用[UIImage imageWithContentsOfFile:path]实例化图像 3.Bundle(包)中的图片素材 往项目中拖拽素材时,通常选择 (1) Destination: 勾选 (2) Folders: 1)选择第一项:黄色文件夹 注意点:Xcode中分文件夹,Bundle中所有所在都在同一个文件夹下,因此,不能出现文件重名的情况 特点: a.可以直接使用[NSBundle mainBundle]作为资源路径,效率高! b.可以使用[UIImage imageNamed:]加载图像 2)选择第二项:蓝色文件夹 注意点:Xcode中分文件夹,Bundle中同样分文件夹,因此,可以出现文件重名的情况 特点: a.需要在[NSBundle mainBundle]的基础上拼接实际的路径,效率较差 b.不能使用[UIImage imageNamed:]加载图
iOS imageNamed VS imageWithContentsOfFile的更多相关文章
- iOS imageNamed 与 imageWithContentsOfFile 的区别
imageNamed 方法 1)后面的参数是icon的名字,图片可以存在项目中,也可以存在Asset中 2)该方法只适合一些中小型的图片读取,而一些比较大的资源图片并不适合用这个方法 3)这个方法加载 ...
- imageNamed和imageWithContentsOfFile区别
在 Apple 官方帮助文档提供了两个加载图片的方法 imageNamed , 其参数为图片的名字 imageWithContentsOfFile , 其参数是图片文件的路径 下面主要是说一下他们的区 ...
- imageNamed、imageWithContentsOfFile、imageWithData
[UIImage imageNamed:ImageName]; 1.加载图片占据的内存较大 2.相同的图片只会加载一份到内存中,如果同时使用,使用同一个对象即可 3.当对象销毁,图片对象不会随着一起销 ...
- imageNamed 与 imageWithContentsOfFile的区别
如题,是不是大家为了方便都这样加载图片啊 myImage = [UIImage imageNamed:@"icon.png"];那么小心了这种方法在一些图片很少,或者图片很小的程序 ...
- UIImage imageNamed 与 imageWithContentsOfFile的差别
[UIImage imageNamed:]仅仅适合与UI界面中的贴图的读取,较大的资源文件应该尽量避免使用 用UIImage载入本地图像最经常使用的是以下三种: 1.用imageNamed方法 [UI ...
- imageNamed 、imageWithContentsOfFile、 initWithContentsFile区别
[UIImage imageNamed:]只适合与UI界面中的贴图的读取,较大的资源文件应该尽量避免使用 用UIImage加载本地图像最常用的是下面三种: 1.用imageNamed方法 [UIIma ...
- imageNamed 与 imageWithContentsOfFile差额
郝萌主倾心贡献,尊重作者的劳动成果,请勿转载. 假设文章对您有所帮助.欢迎给作者捐赠,支持郝萌主,捐赠数额任意.重在心意^_^ 我要捐赠: 点击捐赠 Cocos2d-X源代码下载:点我传送 普通情况下 ...
- 【腾讯Bugly干货分享】微信读书iOS性能优化
本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/578c93ca9644bd524bfcabe8 “8小时内拼工作,8小时外拼成长 ...
- 微信读书 iOS 性能优化总结
微信读书作为一款阅读类的新产品,目前还处于快速迭代,不断尝试的过程中,性能问题也在业务的不断累积中逐渐体现出来.最近的 1.3.0 版本发布后,关于性能问题的用户反馈逐渐增多,为此,团队开始做一些针对 ...
随机推荐
- MVC-Model
用模型取代字典理由: **使用字典的坏处 一般情况下,存入数据和取出数据都使用“字典类型的key”,编写这些key时,编译时不会有任何的友善提示,需要手敲,容易出错. dict[@“name”] = ...
- tomcat遇到版本问题
1.Dynamic web module 2.J2EE Web modules 3.Tomcat version 4.<web-app xmlns:xsi="http://www.w ...
- tomcat 测试页面显示
首先下载匹配jdk版本的tomcat 解压即可使用 将完成的html文件直接放置到webapps目录下的子目录中是无法使用的 原因是tomcat默认加载的是jsp文件,且需要文件配置 所以,除去在we ...
- WPF数据模板样式选择器
在使用数据模板样式选择器时,不能设置ItemContainerStyle的属性值,如果设置了该值,那么数据模板样式选择器会失去作用. 在使用数据模板样式选择器时,首先要创建数据模板样式选择器对象,此对 ...
- ASP.NET:把ashx写到类库里并在页面上调用的具体方法
在类库中建Http Handler的操作很简单,就是添加一个普通的类,然后把之前ashx里的代码几乎一模一样贴到这个类中.但要注意命名空间和类名,因为之后我们会用 到.样例Handler: names ...
- Unity3D学习笔记——组件之Effects(效果/特效)——Particle System(粒子系统)
Effects:效果/特效. Particle System:粒子系统.可用于创建烟雾.气流.火焰.涟漪等效果. 在Unity3D 3.5版本之后退出了新的shuriken粒子系统: 添加组件之后 ...
- ios - 上下滚动的新闻
#import <UIKit/UIKit.h> @interface ScrollUpDownView : UIView //设置 要现实的文字 @property(nonatomic, ...
- ios -为什么用WKWebView加载相同的html文本,有时展示的内容却不一样。
如图: 红色框部分是WKWebView,左边的是正常显示情况,右边的异常显示.我是在网页加载完成回调里执行的webview高度自适应内容: // 页面加载完成之后调用 - (void)webVie ...
- iOS蓝牙接收外设数据自动中断
一.错误原因 在做iOS设备作为central,与蓝牙外设连接,接收蓝牙外设传输的数据时发生蓝牙中断. 在- (void)centralManager:(CBCentralManager *)cent ...
- linux linux 互传文件 win 不通过 ftp sftp 往linux 传文件(文件夹)
linux 传入 传出文件 swp port 22 怎样通过swp通过docker 容器向外传文件 通过scp Linux互传文件,需要知道文件源 file source 所在系统的ip wuse ...