iOS 载入图片选择imageNamed 方法还是 imageWithContentsOfFile?
Apple官方的文档为生成一个UIImage对象提供了两种方法:
1. imageNamed,其參数为图片的名字。
2. imageWithContentsOfFile,其參数也是图片文件的路径。
那么两种有什么差别吗?
肯定是有的。
依据Apple的官方文档:
imageNamed:
 这种方法用一个指定的名字在系统缓存中查找并返回一个图片对象假设它存在的话。
假设缓存中没有找到对应的图片,这种方法从指定的文档中载入然后缓存并返回这个对象。因此imageNamed的长处是当载入时会缓存图片。所以当图片会频繁的使用时,那么用imageNamed的方法会比較好。比如:你须要在
 一个TableView里的TableViewCell里都载入相同一个图标,那么用imageNamed载入图像效率非常高。系统会把那个图标Cache到内存,在TableViewCell里每次利用那个图 像的时候。仅仅会把图片指针指向同一块内存。
正是因此使用imageNamed会缓存图片,即将图片的数据放在内存中,iOS的内存非常珍贵而且在内存消耗过大时。会强制释放内存。即会遇到memory
 warnings。而在iOS系统里面释放图像的内存是一件比較麻烦的事情。有可能会造成内存泄漏。比如:当一 个UIView对象的animationImages是一个装有UIImage对象动态数组NSMutableArray,并进行逐帧动画。当使用imageNamed的方式载入图像到一个动态数组NSMutableArray,这将会非常有可能造成内存泄露。
原因非常显然的。
imageWithContentsOfFile:仅载入图片。图像数据不会缓存。因此对于较大的图片以及使用情况较少时。那就能够用该方法。减少内存消耗。
以下列举出两种方法的具体使用方法:
NSString *path = [[NSBundle mainBundle] pathForResource:@”icon” ofType:@”png”];
UIImage *image = [UIImage imageWithContentsOfFile:path];
以及:
 NSString *filePath = [[NSBundle mainBundle] pathForResource:fileName ofType:“png”];
 NSData *image = [NSData dataWithContentsOfFile:filePath];
 UIImage *image = [UIImage imageWithData:image]; //or = [UIImage imageWithContentsOfFile:filePath];
再次强调两种使用方法各有各的长处,须要针对具体的应用场景来使用他们。
iOS 载入图片选择imageNamed 方法还是 imageWithContentsOfFile?的更多相关文章
- iOS 加载图片选择imageNamed 方法还是 imageWithContentsOfFile?
		
Apple官方的文档为生成一个UIImage对象提供了两种方法: 1. imageNamed,其参数为图片的名字: 2. imageWithContentsOfFile,其参数也是图片文件的路径. ...
 - 10、 iOS 加载图片选择imageNamed 方法还是 imageWithContentsOfFile
		
Apple官方的文档为生成一个UIImage对象提供了两种方法: 1. imageNamed,其参数为图片的名字: 2. imageWithContentsOfFile,其参数是图片文件的路径. 两种 ...
 - iOS 正确选择图片加载方式
		
正确选择图片加载方式能够对内存优化起到很大的作用,常见的图片加载方式有下面三种: //方法1 UIImage *imag1 = [UIImage imageNamed:@"image.png ...
 - 25条提高iOS app性能的方法和技巧
		
以下这些技巧分为三个不同那个的级别---基础,中级,高级. 基础 这些技巧你要总是想着实现在你开发的App中. 1. 用ARC去管理内存(Use ARC to Manage Memory) 2.适当的 ...
 - iOS-提高iOS开发效率的方法和工具
		
提高iOS开发效率的方法和工具 介绍 这篇文章主要是介绍一下我在iOS开发中使用到的一些可以提升开发效率的方法和工具. IDE 首先要说的肯定是IDE了,说到IDE,Xcode不能跑,当然你也可能同时 ...
 - iOS中的过期方法和新的替代方法
		
关于iOS中的过期方法和新的替代方法 1.获取某些类的UINavigationBar的统一外观并设置UINavigationbar的背景 注:方法名改了但是基本使用方法不变 + (instancety ...
 - UIImage imageNamed和UIImage imageWithContentsOfFile区别
		
UIImage imageNamed和 [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:imageNam ...
 - IOS 如何选择delegate、notification、KVO?
		
IOS 如何选择delegate.notification.KVO? 博客分类: IOS 前面分别讲了delegate.notification和KVO的实现原理,以及实际使用步骤,我们心中不禁有 ...
 - UIView封装动画--iOS利用系统提供方法来做关键帧动画
		
iOS利用系统提供方法来做关键帧动画 ios7以后才有用. /*关键帧动画 options:UIViewKeyframeAnimationOptions类型 */ [UIView animateKey ...
 
随机推荐
- 嵌入式实时操作系统Nucleus PLUS综述
			
近些年来,随着嵌入式系统飞速的发展.嵌入式实时操作系统广泛地应用在制造工业.过程控制.通讯.仪器仪表.汽车.船舶.航空航天.军事.装备.消费类产 品等方面. Nucleus PLUS 是为实时嵌入式应 ...
 - View的setTag和getTag使用
			
在listview 优化其中,会使用到setTag()以及getTag()方法 代码例如以下: @Override public View getView(int position, View con ...
 - C语言变长參数的认识以及宏实现
			
1.认识 变长參数是C语言的特殊參数形式.比如例如以下函数声明: int printf(const char *format, ....); 如此的声明表明,printf函数除了第一个參数类型为con ...
 - Redis命令学习-string类型操作
			
APPEND key value 假设key已经存在,而且为字符串.那么这个命令会把value追加到原来值的末尾.假设key不存在.首先创建一个空字符串,再运行追加操作. 返回值:返回 ...
 - YUV422与RGB互相转换
			
YUV422与RGB互相转换(经验证在IPNC与PC上都可以) 前一段时间在DM8168中进行颜色空间的转换,在网上找了些程序,自己也根据网上的改了下,由于能力问题,实在是不好意思说做了好几天才弄 ...
 - PHPstorm配置远程及本地服务器
			
首先打开PHPStorm的设置. 找到如下页面 OPEN一个项目,路径为XAMPP的安装路径 选择Local or mounted folder 设置以上属性,upload/download proj ...
 - 常用校验算法CRC、MD5、SHA_转
			
1.算法概述 数据摘要算法是密码学算法中非常重要的一个分支,它通过对所有数据提取指纹信息以实现数据签名.数据完整性校验等功能,由于其不可逆性,有时候会被用做敏感信息的加密.数据摘要算法也被称为哈希(H ...
 - zeppelin部署
			
1.下载解压2.修改conf/zeppelin-env.sh,添加如下两行 export ZEPPELIN_PORT= export MASTER=spark://master:7077 3.启动 b ...
 - 调试node.js应用--node-inspector
			
如果你在编写Node.js代码,node-inspector是必备之选,比Node.js的内置调试器好出许多.使用起来跟Chrome的javascript调试器很相似. 使用npm安装: $ npm ...
 - Android Studio--NDK编译C代码为.so文件,JNI调用
			
前言: 从Android Studio开始,就支持jni和.so库调用了. 环境: Windows 7+Android Studio2.1.2+NDK版本:android-ndk-r10e 准备工作: ...