iOS-UIImage imageWithContentsOfFile 和 imageName 对照
1.imageWithContentsOfFile
NSString *imagePath = [NSString stringWithFormat:@"%@/%@",[[NSBundle mainBundle] resourcePath],@"icon.png"];
UIImage *imageI = [UIImage imageWithContentsOfFile:imagePath];
imageWithContentsOfFile的方式,在使用完毕之后系统会释放。不会缓存下来,所以也就没有这样的问题。一般也不会把全部的图片都会缓存。有些图片在应用中仅仅使用一两次的,就能够用这样的方式。比方新手引导界面的图片等等,就适合这样的方式。
没有明显的界限。
2.imageName
UIImage *image = [UIImage imageNamed:@"icon"];
imageName的方式会在使用的时候系统会cache,程序猿是无法处理cache,这是由系统自己主动处理的。对于反复载入的图像,速度会提升非常多,这样反而用户体验好。所以假设某张图片须要在应用中使用多次,或者反复引用。使用imageName的方式会更好,
所以,在app中一些常常会使用的,须要反复载入的,使用imageName会提升用户体验!
Apple的官方文档:
imageNamed: 这种方法用一个指定的名字在系统缓存中查找并返回一个图片对象假设它存在的话。假设缓存中没有找到对应的图片,这种方法从指定的文档中载入然后缓存并返回这个对象。
因此imageNamed的长处是当载入时会缓存图片。所以当图片会频繁的使用时,那么用imageNamed的方法会比較好。比如:你须要在 一个TableView里的TableViewCell里都载入相同一个图标,那么用imageNamed载入图像效率非常高。
系统会把那个图标Cache到内存,在TableViewCell里每次利用那个图 像的时候,仅仅会把图片指针指向同一块内存。正是因此使用imageNamed会缓存图片。即将图片的数据放在内存中,iOS的内存非常珍贵并且在内存消耗过大时。会强制释放内存,即会遇到memory warnings。而在iOS系统里面释放图像的内存是一件比較麻烦的事情。有可能会造成内存泄漏。比如:当一 个UIView对象的animationImages是一个装有UIImage对象动态数组NSMutableArray,并进行逐帧动画。当使用imageNamed的方式载入图像到一个动态数组NSMutableArray,这将会非常有可能造成内存泄露。
原因非常显然的。
imageWithContentsOfFile:仅载入图片。图像数据不会缓存。因此对于较大的图片以及使用情况较少时,那就能够用该方法,降低内存消耗。
一、载入图片问题
UIImage image = [UIImage imageNamed:imageFileName];
这样的图片载入方式带有图片缓存的功能。使用这样的方式载入图片后。图片会自己主动添加系统缓存中。并不会马上释放到内存。一些资源使程序中常常使用的图片资源。
使用这样的方式会加快程序的执行降低IO操作,但对于项目中仅仅用到一次的图片。假设採用这样的方案载入。会增导致程序的内存使用添加。
下面为官方对此方法的解释说明:
imageNamed:
Returns the image object associated with the specified filename.
- (UIImage )imageNamed:( NSString ) name
Parameters
name
The name of the file. If this is the first time the image is being loaded, the method looks for an image with the specified name in the application’s main bundle.
Return Value
The image object for the specified file, or nil if the method could not find the specified image.
Discussion
This method looks in the system caches for an image object with the specified name and returns that object if it exists. If a matching image object is not already
in the cache, this method loads the image data from the specified file, caches it, and then returns the resulting object.
二、非缓存的载入方式
+ (UIImage )imageWithContentsOfFile:(NSString )path
- (UIImage )imageWithData:(NSData )data
三、何时使用imageNamed方法
1、採用imageNamed方法的图片载入情况
图片资源反复使用到,如button背景图片的蓝色背景。这些图片要常常常使用到,并且占用内存少
2、不应该採用的情况:
(1)图片一般仅仅使用一次。如一些用户的照片资源
(2)图片资源较大,载入到内存后,比較耗费内存资源
iOS-UIImage imageWithContentsOfFile 和 imageName 对照的更多相关文章
- iOS UIImage DownLoad图片的下载缓存全部在此
iOS图片的下载缓存全部在此 分类: iOS编程 -- : 2075人阅读 评论() 收藏 举报 注意: 我的文章只写给自己看 ------------------------------------ ...
- UIImage imageNamed和UIImage imageWithContentsOfFile区别
UIImage imageNamed和 [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:imageNam ...
- 【原】[UIImage imageWithContentsOfFile:]引发的图片无法显示的问题
最近在做一个iOS手机项目的时候,遇到一个奇怪的问题,这里跟大家分享一下. 一.问题重现 1.启动App后,通过http请求下载了一个1.jpg文件到Cache目录下,下载成功之后,将图片显示在界面上 ...
- 第3月30天 UIImage imageWithContentsOfFile卡顿 Can't add self as subview MPMoviePlayerControlle rcrash
1. UIImage imageWithContentsOfFile卡顿 [[UIImage alloc] initWithContentsOfFile 卡顿 2.uitableview scroll ...
- [UIImage imageWithContentsOfFile:@""] 内存警告
You will want to use the [UIImage imageWithContentsOfFile:@""] method, as that doesn't cac ...
- iOS UIImage:获取图片主色调
本文转载至 http://www.wahenzan.com/a/mdev/ios/2015/0325/1677.html -(UIColor*)mostColor{ #if __IPHONE_OS_V ...
- [iOS] UIImage和CGImageRef
CGImageRef并不是面向对象的API,也不是类,只是一个指针类型,Quartz 2D对CGImageRef的定义为: typedef struct CGImage *CGImageRef; 由此 ...
- iOS UIimage初始化时的两种方法
第一种方式:UIImage *image = [UIImage imageNamed:@"image"]; 使用这种方式,第一次读取的时候,先把这个图片存到缓存里,下次再使用时直接 ...
- iOS UIImage扩展方法(category):放大、旋转、合并UIImage、增加渐变层、添加阴影、调节透明度、保存到相册
一有用的 UIImage 扩展,支持(等比例)放大和旋转可在许多 App 中使用. UIImage-Extensions.h #import <Foundation/Foundation.h&g ...
随机推荐
- hdu 1754 I Hate It 线段树 点改动
// hdu 1754 I Hate It 线段树 点改动 // // 不多说,裸的点改动 // // 继续练 #include <algorithm> #include <bits ...
- 数据结构 - 归并排序(merging sort) 具体解释 及 代码
归并排序(merging sort) 具体解释 及 代码 本文地址: http://blog.csdn.net/caroline_wendy 归并排序(merging sort): 包括2-路归并排序 ...
- PBKDF2加密的实现
PBKDF2(Password-Based Key Derivation Function). 通过哈希算法进行加密.由于哈希算法是单向的,能够将不论什么大小的数据转化为定长的"指纹&quo ...
- c13--数组
// // main.c // 进制查表法 // // Created by xiaomage on 15/6/10. // Copyright (c) 2015年 xiaomage. All rig ...
- 利用机器学习进行DNS隐蔽通道检测——数据收集,利用iodine进行DNS隐蔽通道样本收集
我们在使用机器学习做DNS隐蔽通道检测的过程中,不得不面临样本收集的问题,没办法,机器学习没有样本真是“巧妇难为无米之炊”啊! 本文简单介绍了DNS隐蔽通道传输工具iodine,并介绍如何从iodin ...
- SQL的优化技巧
一.一些常见的SQL实践 (1)负向条件查询不能使用索引 select * from order where status!=0 and stauts!=1 not in/not exists都不是好 ...
- Centos6.5添加Epel和Remi源安装Lamp环境
想搭建一个Lamp环境,因为编译安装太麻烦,对于我这样的新手来说,太过于复杂.而CentOS自带的Apache.MySql和PHP的版本都太低,不想用.上百度搜了一轮,原来可以通过添加Epel和Rem ...
- ios中去除tableView的分割线
self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
- HD-ACM算法专攻系列(19)——Leftmost Digit
问题描述: AC源码: 解题关键是,数据很大,不能强算,需要使用技巧,这里使用科学计算法,令N^N=a*10^n ,取对数后变为 N*log10(N)=log10(a)+n,令x = log10(a) ...
- C++代码审查---参考林锐高质量C/C++
功能模块名称 审查人 审查日期 代码名称 代码作者 文件结构 重要性 审查项 结论 头文件和定义文件的名称是否合理? 头文件和定义文件的目录结构是否合理? ...