UIImage imageNamed 与 imageWithContentsOfFile的区别

[UIImage imageNamed:]只适合与UI界面中的贴图的读取,较大的资源文件应该尽量避免使用

用UIImage加载本地图像最常用的是下面三种:

1.用imageNamed方法

[UIImage imageNamed:ImageName];

2.用 imageWithContentsOfFile 方法

NSString *thumbnailFile = [NSString stringWithFormat:@"%@/%@.png", [[NSBundle mainBundle] resourcePath], fileName];
UIImage *thumbnail = [UIImage imageWithContentsOfFile:thumbnailFile];

3. 用initWithContentsFile方法

UIImage *image = [[UIImage alloc] initWithContentsOfFile:filePath]

第一种方法为常见方法,利用它可以方便加载资源图片。用imageNamed的方式加载时,会把图像数据根据它的名字缓存在系统内存中,以提高imageNamed方法获得相同图片的image对象的性能。即使生成的对象被 autoReleasePool释放了,这份缓存也不释放。而且没有明确的释放方法。如果图像比较大,或者图像比较多,用这种方式会消耗很大的内存。

第二种方法加载的图片是不会缓存的。得到的对象时autoRelease的,当autoReleasePool释放时才释放。

第三种方法要手动release掉。不系统缓存。release后立即释放,一般用在封面等图比较大的地方。

用imageNamed的方式加载时,系统会把图像Cache到内存。如果图像比较大,或者图像比较多,用这种方式会消耗很大的内存,而且释放图像的 内存是一件相对来说比较麻烦的事情。例如:如果利用imageNamed的方式加载图像到一个动态数组NSMutableArray,然后将将数组赋予一 个UIView的对象的animationImages进行逐帧动画,那么这将会很有可能造成内存泄露。并且释放图像所占据的内存也不会那么简单。但是利 用imageNamed加载图像也有自己的优势。对于同一个图像系统只会把它Cache到内存一次,这对于图像的重复利用是非常有优势的。例如:你需要在
一个TableView里重复加载同样一个图标,那么用imageNamed加载图像,系统会把那个图标Cache到内存,在Table里每次利用那个图 像的时候,只会把图片指针指向同一块内存。这种情况使用imageNamed加载图像就会变得非常有效。

时间: 2024-12-22 04:39:57

UIImage imageNamed 与 imageWithContentsOfFile的区别的相关文章

imageNamed 与 imageWithContentsOfFile的区别

如题,是不是大家为了方便都这样加载图片啊 myImage = [UIImage imageNamed:@"icon.png"]; 那么小心了 这种方法在一些图片很少,或者图片很小的程序里是ok的. 但是,在大量加载图片的程序里,请千万不要这样做. 为什么呢 ??????? 这种方法在application bundle的顶层文件夹寻找由供应的名字的图象 . 如果找到图片,装载到iPhone系统缓存图象.那意味图片是(理论上)放在内存里作为cache的. 试想你图片多了,是什么后果```

imageNamed和imageWithContentsOfFile区别

在 Apple 官方帮助文档提供了两个加载图片的方法 imageNamed , 其参数为图片的名字 imageWithContentsOfFile , 其参数是图片文件的路径 下面主要是说一下他们的区别: imageNamed: 用这个方法加载图片分为两种情况: 系统缓存有这个图片 直接从缓存中取得 系统缓存没有这个图片 通过传入的文件名对整个工程进行遍历 (在application bundle的顶层文件夹寻找名字的图象 ), 如果如果找到对应的图片 , iOS 系统首先要做的是将这个图片放到

iOS 开发----imageNamed和imageWithContentsOfFile区别

在 Apple 官方帮助文档提供了两个加载图片的方法 imageNamed , 其参数为图片的名字 imageWithContentsOfFile , 其参数是图片文件的路径 下面主要是说一下他们的区别: imageNamed: 用这个方法加载图片分为两种情况: 系统缓存有这个图片 直接从缓存中取得 系统缓存没有这个图片 通过传入的文件名对整个工程进行遍历 , 如果如果找到对应的图片 , iOS 系统首先要做的是将这个图片放到系统         缓存中去,以备下次使用的时候直接从系统缓存中取

imageNamed 、imageWithContentsOfFile、 initWithContentsFile区别

[UIImage imageNamed:]只适合与UI界面中的贴图的读取,较大的资源文件应该尽量避免使用 用UIImage加载本地图像最常用的是下面三种: 1.用imageNamed方法 [UIImage imageNamed:ImageName]; 2.用 imageWithContentsOfFile 方法 NSString *thumbnailFile = [NSString stringWithFormat:@"%@/%@.png", [[NSBundle mainBundle

imageNamed和dataWithContentsOfFile的区别(1)

imageNamed和dataWithContentsOfFile的区别 imagecacheuiviewextensionprocessingxcode 最近老是受iphone内存问题的困扰,找了些资料,现在贴出了两篇经典的博文.博文如下: 转载自:http://blog.csdn.net/hj2060/article/details/6925926 最近做一个写真书,由于加载大量的图片,内存溢出,程序崩溃,却不报任何错误或者警告. 用xcode的instrument工具查看内存使用情况时,发

initWithImage和imageWithContentsOfFile的区别

UIImageView *imageView = [[UIImageView alloc] initWithImage:         [UIImage imageNamed:@"icon.png"]]; // 会缓存图片 UIImageView *imageView = [[UIImageView alloc] initWithImage:         [UIImage imageWithContentsOfFile:@"icon.png"]]; // 不会

UIImage两种初始化的区别

UIImage可以通过以下两种方式进行初始化: 1 //第一种初始化方式:[注意使用这种初始化的时候如果是png格式的可以不给后缀名,根据屏幕的的分辨率去匹配图片] 2 UIImage *image = [UIImage imageNamed:@"v_red_heart_selected"]; 1 //第二种初始化方式:[必须拼接图片的全名称,否则image的路径为空] 2 NSString *filePath = [[NSBundle mainBundle] pathForResou

imageNamed、imageWithContentsOfFile、imageWithData

[UIImage imageNamed:ImageName]; 1.加载图片占据的内存较大 2.相同的图片只会加载一份到内存中,如果同时使用,使用同一个对象即可 3.当对象销毁,图片对象不会随着一起销毁 NSString *path = [[NSBundle mainBundle] pathForResource:@"icon" ofType:@"png"]; myImage = [UIImage imageWithContentsOfFile:path]; 1.加

UIimage两种初始化的区别 广告轮播封装

UIimage两种初始化的区别 第一种初始化: UIImage *image = [UIImage imageNamed:@"xxx"];  注意(这种方法加载的图片如果后缀名是png的,可以不写后缀名,根据屏幕分辨率自己去匹配图片) 第二种初始化: NSString *path = [[NSBundle mainBundle] pathForResource:@"xxx.png" ofType:nil]; UIImage *image = [[UIImage al