今天在优化的时候,用了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的更多相关文章

  1. NSCache和NSURLCache、网络缓存优化

    本文目录 一种缓存优化方案 响应头'Last-Modified'和请求头'If-Modified-Since' 'Keep-Alive'响应头和不离线的URLSession 'Expires'响应头 ...

  2. NSCache详解

    NSCache---详解 NSCache: NSCache是苹果官方提供的缓存类,在AFNetworking中,使用它来进行图片缓存. NSCache是线程安全的,在多线程操作中,不需要对Cache进 ...

  3. NSURLSession & NSCache

    用于替代 NSURLConnection 支持后台运行的网络任务 暂停.停止.重启网络任务,不再需要 NSOperation 封装 请求可以使用同样的配置容器 不同的 session 可以使用不同的私 ...

  4. NSURLCache 和 NSCache 的区别

    NSURLCache 和 NSCache 的区别 NSURLCache提供的是URL Request缓存,可以在Memory和Disk上:NSCache提供了HTTP Request外的东西的缓存方式 ...

  5. iOS - OC NSCache 缓存

    前言 NSCache 是苹果提供的一个专门用来做缓存的类,当内存 "不足" 或超过限制的时候,会自动清理缓存,使用时可以指定缓存的数量和成本.用法与 NSMutableDictio ...

  6. IOS缓存之NSCache缓存

    NSCache:专门做缓存的类 NSCache简介:NSCache是苹果官方提供的缓存类,用法与NSMutableDictionary的用法很相似,在AFNetworking和SDWebImage中, ...

  7. 多线程与网络之SDWebImage和NSCache

    *:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } ...

  8. iOS NSCache缓存类的了解

    前言:   最近面试时,问到了限定并发数的视频下载,当时回答的时通过GCD_barrier 处理,回来想想也可以通过NSCache处理,所以顺便复习一下,这个知识点. 一,关于NSCache说明 说明 ...

  9. NSCache的简单使用

    简介 1)NSCache 是苹果官方提供的缓存类,用法与 NSMutableDictionary 的用法很相似,在 AFNetworking 和 SDWebImage 中,使用它来管理缓存. 2)NS ...

随机推荐

  1. Cacti -- Advance Ping

    一.搭建Cacti 1. 安装epel扩展源:yum install -y epel-release 2. 安装lamp环境:yum install -y httpd php php-mysql my ...

  2. C#.NET 大型企业信息化系统集成快速开发平台 4.2 版本 - 多软件系统集成缓存体系改进

    由于我们同时开发多个大型应用系统同时系统有大量用户.高并发用户,平时访问系统的用户数量就有3万多人在线.需要对几十个系统进行持续优化改进,同时要增强信息系统的各种安全性. 如此多的系统.如此多的用户, ...

  3. setTimeout,setInterval原理

    function a() { setTimeout(function(){alert(1)},0); alert(2); } a(); 和其他的编程语言一样,Javascript中的函数调用也是通过堆 ...

  4. 极光推送JPush的快速集成

    首先到极光推送的官网上创建一个应用,填写对应的应用名和包名. 创建好之后下载Demo 提取Sdk里面的图片和xml等资源文件放自己项目的相应位置,然后要注意的是.so文件的放置位置: 在main目录下 ...

  5. django request对象和HttpResponse对象

    HttpRequest对象(除非特殊说明,所有属性都是只读,session属性是个例外)HttpRequest.scheme 请求方案(通常为http或https)HttpRequest.body 字 ...

  6. TCP协议中的三次握手和四次挥手(图解)

    建立TCP需要三次握手才能建立,而断开连接则需要四次握手.整个过程如下图所示: 先来看看如何建立连接的. 首先Client端发送连接请求报文,Server段接受连接后回复ACK报文,并为这次连接分配资 ...

  7. 开始学emacs-1

    读readme http://ftp.gnu.org/gnu/emacs/windows/README

  8. VS 团队资源管理 强制解锁锁定文件

    故事是这样发生的: 以前有台电脑,在团队资源里看程序,可能冥冥中不小心按了个空格,so,文件被锁定 而我却没有发现 如果再给我一个机会,我只想说记得签入 然后,高潮来了 重装电脑 欣喜的装好新机子打开 ...

  9. java获取当天,前天,明天,本周,本月,本年的开始日期时间和结束日期时间

    package demoone; import java.sql.Timestamp; import java.text.ParseException; import java.text.Simple ...

  10. Web Service 中返回DataSet结果大小改进

    http://www.cnblogs.com/scottckt/archive/2012/11/10/2764496.html Web Service 中返回DataSet结果方法: 1)直接返回Da ...