今天在优化的时候,用了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. mysql 有两种数据库引擎发音

    mysql 有两种数据库引擎 一种是 MyISAM,一种是 InnoDB MyISAM 发音为 "my-z[ei]m"; InnoDB 发音为 "in-no-db&quo ...

  2. 线程私有数据和pthread_once

    #include <stdio.h> #include <pthread.h> pthread_key_t key; pthread_once_t ponce = PTHREA ...

  3. codevs 2928 你缺什么

     时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond 题目描述 Description 继"你幸福吗"之后,央视又推出了"你缺什么 ...

  4. 在CSS中定义a:link、a:visited、a:hover、a:active顺序

    摘自:http://blog.snsgou.com/post-2.html     以前用CSS一直没有遇到过这个问题,在最近给一个本科同学做的项目里面.出现一些问题,搜索引擎查了一些网站和资料,发现 ...

  5. 分享 Ionic 开发 Hybrid App 中遇到的问题以及后期发布 iOS/Android 的方方面面

    此篇文章主要整理了最近在使用 Ionic 开发 Hybrid App 过程中遇到的一些疑难点以及后期发布生成 iOS 和 Android 版本过程中的种种问题. 文章目录 Ionic 简介和项目需求介 ...

  6. Android开发之XUtils框架使用和报错处理

    一.XUtils  lib的的添加: 1.点击+,选择第一个Library dependency 2.输入XUtils 按enter键,搜索: 3.然后就是选择XUtils,选择哪个版本就看个人了,接 ...

  7. iOS小知识点(UI部分)

    1. 父视图通过Tag来找到UIView UIView *targetView = [superView viewWithTag:10];//只在当前视图以及subviews中找,不能再孙子中找. 2 ...

  8. Prince2七大原则(4)

    我们先来回顾一下,PRINCE2七大原则分别是持续的业务验证,经验学习,角色与责任,按阶段管理,例外管理,关注产品,剪裁. 第四个原则:按阶段管理. 阶段管理其实是给高层提供了项目生命周期中相对应的控 ...

  9. u盘安装系统教程详解

    一.准备阶段 提前准备一个至少1G或以上的u盘,方便好用. 1.制作u盘启动工具 (1)工具下载,推荐IT天空的优启通 下载地址:https://www.itiankong.net/thread-37 ...

  10. 【转】javascript面向对象编程

    摘要:本文本来是想自己写的,奈何花了好长时间写好之后忘记保存,还按了刷新键,一键回到解放前,索性不写了,所以本文是转载的. 面向对象编程是用抽象方式创建基于现实世界模型的一种编程模式,主要包括模块化. ...