NSCache
今天在优化的时候,用了NSCache,感觉没什么两样(视觉上).按理内存缓存,怎么也比从硬盘读取的要快..
dispatch_async(dispatch_get_global_queue(, ), ^{
NSLog(@"Start");
NSMutableArray *arr = [[NSMutableArray alloc] init];
for (int i = ; i< ; i++) {
UIImage *ii = [UIImage imageWithData:[Cache objectForKey:@"img"]];
[arr addObject:ii];
}
NSLog(@"End");
});
/* Result With Cache;
2016-01-12 09:40:28.079 MVVM[67944:4076775] Start
2016-01-12 09:40:28.088 MVVM[67944:4076775] End ->9ms
2016-01-12 09:41:02.894 MVVM[67944:4076798] Start
2016-01-12 09:41:02.903 MVVM[67944:4076798] End ->9ms
2016-01-12 09:41:13.581 MVVM[67944:4077543] Start
2016-01-12 09:41:13.589 MVVM[67944:4077543] End ->8ms
500次
2016-01-12 09:45:51.976 MVVM[68151:4082651] Start
2016-01-12 09:45:52.049 MVVM[68151:4082651] End ->73ms
2016-01-12 09:46:07.863 MVVM[68151:4082967] Start
2016-01-12 09:46:07.929 MVVM[68151:4082967] End ->66ms
2016-01-12 09:46:36.374 MVVM[68151:4083477] Start
2016-01-12 09:46:36.433 MVVM[68151:4083477] End ->59ms
*/
dispatch_async(dispatch_get_global_queue(, ), ^{
NSLog(@"Disk_Start");
NSMutableArray *arr = [[NSMutableArray alloc] init];
for (int i = ; i< ; i++) {
NSData *Rdata = [[NSData alloc] initWithContentsOfFile:filePath];
UIImage *ii = [UIImage imageWithData:Rdata];
[arr addObject:ii];
}
NSLog(@"Disk_End");
});
/* Result With Disk
2016-01-12 09:41:36.781 MVVM[67991:4078065] Disk_Start
2016-01-12 09:41:36.846 MVVM[67991:4078065] Disk_End ->65ms
2016-01-12 09:41:53.204 MVVM[67991:4078091] Disk_Start
2016-01-12 09:41:53.251 MVVM[67991:4078091] Disk_End ->47ms
2016-01-12 09:41:59.468 MVVM[67991:4078614] Disk_Start
2016-01-12 09:41:59.514 MVVM[67991:4078614] Disk_End ->46ms
500次
2016-01-12 09:44:32.986 MVVM[68073:4080907] Disk_Start
2016-01-12 09:44:33.876 MVVM[68073:4080907] Disk_End ->890ms
2016-01-12 09:44:57.400 MVVM[68073:4081368] Disk_Start
2016-01-12 09:44:57.976 MVVM[68073:4081368] Disk_End ->576ms
2016-01-12 09:45:12.159 MVVM[68073:4081577] Disk_Start
2016-01-12 09:45:12.658 MVVM[68073:4081577] Disk_End ->499ms
*/
cache->disk->Internet request
-(UIImage *)getImageForCacheOrDiskOrNetWithKey:(NSString*)Key
{ //cache data NSCache *cache = [[NSCache alloc] init]; NSData *CacheData = [cache objectForKey:Key]; if (CacheData != nil) { return [UIImage imageWithData:CacheData]; }else{ //Disk read NSArray *arr = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES); NSString *cachePath = [arr firstObject]; NSString *filePath = [cachePath stringByAppendingPathComponent:Key]; NSData *Diskdata = [[NSData alloc] initWithContentsOfFile:filePath]; if (Diskdata != nil) { return [UIImage imageWithData:Diskdata]; }else{ //internet request here; NSString *imageURLStr = @"http://pic.58pic.com/58pic/15/48/73/04f58PIC37y_1024.png"; NSData *InternetData = [[NSData alloc] initWithContentsOfURL:[NSURL URLWithString:imageURLStr]]; return [UIImage imageWithData:InternetData]; }
} }
造轮子是为了学习,真正要用,还是老老实实的用sdwebimage等第三方库吧..
NSCache的更多相关文章
- NSCache和NSURLCache、网络缓存优化
本文目录 一种缓存优化方案 响应头'Last-Modified'和请求头'If-Modified-Since' 'Keep-Alive'响应头和不离线的URLSession 'Expires'响应头 ...
- NSCache详解
NSCache---详解 NSCache: NSCache是苹果官方提供的缓存类,在AFNetworking中,使用它来进行图片缓存. NSCache是线程安全的,在多线程操作中,不需要对Cache进 ...
- NSURLSession & NSCache
用于替代 NSURLConnection 支持后台运行的网络任务 暂停.停止.重启网络任务,不再需要 NSOperation 封装 请求可以使用同样的配置容器 不同的 session 可以使用不同的私 ...
- NSURLCache 和 NSCache 的区别
NSURLCache 和 NSCache 的区别 NSURLCache提供的是URL Request缓存,可以在Memory和Disk上:NSCache提供了HTTP Request外的东西的缓存方式 ...
- iOS - OC NSCache 缓存
前言 NSCache 是苹果提供的一个专门用来做缓存的类,当内存 "不足" 或超过限制的时候,会自动清理缓存,使用时可以指定缓存的数量和成本.用法与 NSMutableDictio ...
- IOS缓存之NSCache缓存
NSCache:专门做缓存的类 NSCache简介:NSCache是苹果官方提供的缓存类,用法与NSMutableDictionary的用法很相似,在AFNetworking和SDWebImage中, ...
- 多线程与网络之SDWebImage和NSCache
*:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } ...
- iOS NSCache缓存类的了解
前言: 最近面试时,问到了限定并发数的视频下载,当时回答的时通过GCD_barrier 处理,回来想想也可以通过NSCache处理,所以顺便复习一下,这个知识点. 一,关于NSCache说明 说明 ...
- NSCache的简单使用
简介 1)NSCache 是苹果官方提供的缓存类,用法与 NSMutableDictionary 的用法很相似,在 AFNetworking 和 SDWebImage 中,使用它来管理缓存. 2)NS ...
随机推荐
- Cacti -- Advance Ping
一.搭建Cacti 1. 安装epel扩展源:yum install -y epel-release 2. 安装lamp环境:yum install -y httpd php php-mysql my ...
- C#.NET 大型企业信息化系统集成快速开发平台 4.2 版本 - 多软件系统集成缓存体系改进
由于我们同时开发多个大型应用系统同时系统有大量用户.高并发用户,平时访问系统的用户数量就有3万多人在线.需要对几十个系统进行持续优化改进,同时要增强信息系统的各种安全性. 如此多的系统.如此多的用户, ...
- setTimeout,setInterval原理
function a() { setTimeout(function(){alert(1)},0); alert(2); } a(); 和其他的编程语言一样,Javascript中的函数调用也是通过堆 ...
- 极光推送JPush的快速集成
首先到极光推送的官网上创建一个应用,填写对应的应用名和包名. 创建好之后下载Demo 提取Sdk里面的图片和xml等资源文件放自己项目的相应位置,然后要注意的是.so文件的放置位置: 在main目录下 ...
- django request对象和HttpResponse对象
HttpRequest对象(除非特殊说明,所有属性都是只读,session属性是个例外)HttpRequest.scheme 请求方案(通常为http或https)HttpRequest.body 字 ...
- TCP协议中的三次握手和四次挥手(图解)
建立TCP需要三次握手才能建立,而断开连接则需要四次握手.整个过程如下图所示: 先来看看如何建立连接的. 首先Client端发送连接请求报文,Server段接受连接后回复ACK报文,并为这次连接分配资 ...
- 开始学emacs-1
读readme http://ftp.gnu.org/gnu/emacs/windows/README
- VS 团队资源管理 强制解锁锁定文件
故事是这样发生的: 以前有台电脑,在团队资源里看程序,可能冥冥中不小心按了个空格,so,文件被锁定 而我却没有发现 如果再给我一个机会,我只想说记得签入 然后,高潮来了 重装电脑 欣喜的装好新机子打开 ...
- java获取当天,前天,明天,本周,本月,本年的开始日期时间和结束日期时间
package demoone; import java.sql.Timestamp; import java.text.ParseException; import java.text.Simple ...
- Web Service 中返回DataSet结果大小改进
http://www.cnblogs.com/scottckt/archive/2012/11/10/2764496.html Web Service 中返回DataSet结果方法: 1)直接返回Da ...