iOS imageNamed 的缓存问题
如题,是不是大家为了方便都这样加载图片啊
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 的缓存问题相关推荐
- iOS html5使用缓存并及时更新方案总结
最近一段时间研究了一下H5在iOS移动端表现时使用缓存并可及时更新方案,总结如下: 一.使用Webview自带缓存机制 当我们使用webview加载html资源时的,本质上就是一个向服务器索取资源的h ...
- 玩转iOS开发 - 数据缓存
Why Cache 有时候,对同一个URL请求多次,返回的数据可能都是一样的,比如服务器上的某张图片,无论下载多少次,返回的数据都是一样的. 上面的情况会造成以下问题 (1)用户流量的浪费 (2)程序 ...
- ios html清除缓存,iOS开发之1行代码实现缓存计算及清除缓存
话不多说,直接撸代码 // // gzhCache.h // cache // // Created by 郭志贺 on 2020/5/27. // Copyright © 2020 郭志贺. All ...
- ios如何清理缓存?
个人用8P,根据我个人经验应该是有2种情况: 1.手机内图片和视频占有内存过多 2.微信里面或者某些视频类app内缓存文件过多 1.1针对第一种情况,可以先拷贝或者云备份,然后把手机里面不常用的视频图 ...
- iOS UIWebView清除缓存
为什么80%的码农都做不了架构师?>>> 使用iOS的UIWebView会自动进行缓存,我们在开发的时候要记得清除Cookie和缓存. 在webview的关闭按钮中添加两个方法 ...
- iOS常用方法——WKWebView缓存清理的实现
WKWebView是iOS8之后出现的,相较于UIWebView,WKWebView占用的内存更小,还有一些其他的优化.但是如果我们不去主动清理webView产生的缓存,两者都会存在缓存这个问题.比如 ...
- 唱吧 iOS 音视频缓存处理框架
项目介绍 唱吧 iOS 团队为了解决音视频在线播放的缓存问题,开发了 KTVHTTPCache 这个框架.设计之初是为了解决音视频在线播放的缓存问题,但其本质是对 HTTP 请求进行缓存,对传输内容并 ...
- ios html清除缓存图片,iOS利用SDWebImage实现缓存的计算与清理
一般我们项目中的缓存一般分为2大块:一个是自己缓存的一些数据;还有一个就是我们使用的SDWebImage这个第三方库给我们自动缓存的图片文件缓存了. 实际项目中会配合设置里去清理缓存, 效果截图如下: ...
- iOS开发-清理缓存功能的实现
移动应用在处理网络资源时,一般都会做离线缓存处理,其中以图片缓存最为典型,其中很流行的离线缓存框架为 SDWebImage . 但是,离线缓存会占用手机存储空间,所以缓存清理功能基本成为资讯.购物.阅 ...
最新文章
- 「起点订阅页」Checkbox 美化引发的蝴蝶效应
- python爬虫详细步骤-Python爬虫实践入门,超详细
- 安装 node-sass 时报错
- python小作品speak_python 小案例demo05 升级版石头剪刀布
- 从0开始搭建ELK及采集日志的简单应用
- 第 1 章 第 6 题 带重复数排序问题( 扩展 ) 位向量实现
- 软核、硬核以及固核的概念
- Android之运行app提示The application could not be installed: INSTALL_FAILED_TEST_ONLY
- [剑指offer]面试题第[53-2]题[JAVA][0-n-1中缺失的数字][二分法][暴力法]
- 【文末送书】调参太费力?自动化机器学习来帮你!
- 使用CancellationToken——而不是Thread.Sleep
- Android学习笔记---27_网络通信之通过GET和POST方式提交参数给web应用,以及使用httpClient,来给web项目以post方式发送参数
- 13、OSPF配置实验之LSA2
- 微信红包惊人秘密:谁最容易抢到大红包?
- EXT文件系统族-Ext2文件系统
- css中设置背景颜色、背景图片
- 海康摄像头的ISAPI协议
- 计算机上怎样保护c盘,6个方法教你释放你的C盘空间
- 如何区分光猫、路由器和交换机?
- PyQt——1. 简单认识PyQt及Python3.7安装QtDesigner
热门文章
- linux中普通用户用友所有权限,linux文件的特殊权限
- php 统计数组个数,php统计数组元素的个数和唯一性
- 001_FreeMarker介绍
- 009-Joran配置框架
- linux 内存交换参数,Ubuntu Linux:处理交换内存和内存使用情况
- android web 打印,Android设备WebView打印Console Log
- java jackson json_使用Java和Jackson将Json序列化为通用结构而无...
- r语言electricity数据集_R语言学习-数据集
- SVN服务端的搭建及客户端连接(云上搭建服务端)
- Visual Studio 2015软件安装教程