如题,是不是大家为了方便都这样加载图片啊

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的方式加载,例如:

1. NSString *filePath = [[NSBundle mainBundle] pathForResource:fileName ofType:extension];
   2. NSData *image = [NSData dataWithContentsOfFile:filePath];
   3. [UIImage imageWithData:image];

由于第一种方式要写的代码比较少,可能比较多人利用imageNamed的方式加载图像。其实这两种加载方式都有各自的特点。

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

2)利用NSData方式加载时,图像会被系统以数据方式加载到程序。当你不需要重用该图像,或者你需要将图像以数据方式存储到数据库,又或者你要通过网络下载一个很大的图像时,请尽量使用imageWithData的方式加载图像。

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

原文连接:http://www.cnblogs.com/pengyingh/articles/2355033.html

转载于:https://www.cnblogs.com/wfwenchao/articles/3730595.html

iOS imageNamed 的缓存问题相关推荐

  1. iOS html5使用缓存并及时更新方案总结

    最近一段时间研究了一下H5在iOS移动端表现时使用缓存并可及时更新方案,总结如下: 一.使用Webview自带缓存机制 当我们使用webview加载html资源时的,本质上就是一个向服务器索取资源的h ...

  2. 玩转iOS开发 - 数据缓存

    Why Cache 有时候,对同一个URL请求多次,返回的数据可能都是一样的,比如服务器上的某张图片,无论下载多少次,返回的数据都是一样的. 上面的情况会造成以下问题 (1)用户流量的浪费 (2)程序 ...

  3. ios html清除缓存,iOS开发之1行代码实现缓存计算及清除缓存

    话不多说,直接撸代码 // // gzhCache.h // cache // // Created by 郭志贺 on 2020/5/27. // Copyright © 2020 郭志贺. All ...

  4. ios如何清理缓存?

    个人用8P,根据我个人经验应该是有2种情况: 1.手机内图片和视频占有内存过多 2.微信里面或者某些视频类app内缓存文件过多 1.1针对第一种情况,可以先拷贝或者云备份,然后把手机里面不常用的视频图 ...

  5. iOS UIWebView清除缓存

    为什么80%的码农都做不了架构师?>>>    使用iOS的UIWebView会自动进行缓存,我们在开发的时候要记得清除Cookie和缓存. 在webview的关闭按钮中添加两个方法 ...

  6. iOS常用方法——WKWebView缓存清理的实现

    WKWebView是iOS8之后出现的,相较于UIWebView,WKWebView占用的内存更小,还有一些其他的优化.但是如果我们不去主动清理webView产生的缓存,两者都会存在缓存这个问题.比如 ...

  7. 唱吧 iOS 音视频缓存处理框架

    项目介绍 唱吧 iOS 团队为了解决音视频在线播放的缓存问题,开发了 KTVHTTPCache 这个框架.设计之初是为了解决音视频在线播放的缓存问题,但其本质是对 HTTP 请求进行缓存,对传输内容并 ...

  8. ios html清除缓存图片,iOS利用SDWebImage实现缓存的计算与清理

    一般我们项目中的缓存一般分为2大块:一个是自己缓存的一些数据;还有一个就是我们使用的SDWebImage这个第三方库给我们自动缓存的图片文件缓存了. 实际项目中会配合设置里去清理缓存, 效果截图如下: ...

  9. iOS开发-清理缓存功能的实现

    移动应用在处理网络资源时,一般都会做离线缓存处理,其中以图片缓存最为典型,其中很流行的离线缓存框架为 SDWebImage . 但是,离线缓存会占用手机存储空间,所以缓存清理功能基本成为资讯.购物.阅 ...

最新文章

  1. 「起点订阅页」Checkbox 美化引发的蝴蝶效应
  2. python爬虫详细步骤-Python爬虫实践入门,超详细
  3. 安装 node-sass 时报错
  4. python小作品speak_python 小案例demo05 升级版石头剪刀布
  5. 从0开始搭建ELK及采集日志的简单应用
  6. 第 1 章 第 6 题 带重复数排序问题( 扩展 ) 位向量实现
  7. 软核、硬核以及固核的概念
  8. Android之运行app提示The application could not be installed: INSTALL_FAILED_TEST_ONLY
  9. [剑指offer]面试题第[53-2]题[JAVA][0-n-1中缺失的数字][二分法][暴力法]
  10. 【文末送书】调参太费力?自动化机器学习来帮你!
  11. 使用CancellationToken——而不是Thread.Sleep
  12. Android学习笔记---27_网络通信之通过GET和POST方式提交参数给web应用,以及使用httpClient,来给web项目以post方式发送参数
  13. 13、OSPF配置实验之LSA2
  14. 微信红包惊人秘密:谁最容易抢到大红包?
  15. EXT文件系统族-Ext2文件系统
  16. css中设置背景颜色、背景图片
  17. 海康摄像头的ISAPI协议
  18. 计算机上怎样保护c盘,6个方法教你释放你的C盘空间
  19. 如何区分光猫、路由器和交换机?
  20. PyQt——1. 简单认识PyQt及Python3.7安装QtDesigner

热门文章

  1. linux中普通用户用友所有权限,linux文件的特殊权限
  2. php 统计数组个数,php统计数组元素的个数和唯一性
  3. 001_FreeMarker介绍
  4. 009-Joran配置框架
  5. linux 内存交换参数,Ubuntu Linux:处理交换内存和内存使用情况
  6. android web 打印,Android设备WebView打印Console Log
  7. java jackson json_使用Java和Jackson将Json序列化为通用结构而无...
  8. r语言electricity数据集_R语言学习-数据集
  9. SVN服务端的搭建及客户端连接(云上搭建服务端)
  10. Visual Studio 2015软件安装教程