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 ...
随机推荐
- 关于javascript中this的那点事
this可谓是JavaScript中的开发神器,使用得当的话不仅有事半功倍的效果,而且代码的逼格也更高.但是既然是神器,如果你没有足够的功力的话,那么就不要使用它,否则就有可能自毁身亡.曾几何时,我偶 ...
- jquery获取父元素及祖先元素
parent是找当前元素的第一个父节点,parents是找当前元素的所有父节点 先说一下parent和parents的区别 从字面上不难看出 parent是指取得一个包含着所有匹配元素的唯一父元素的元 ...
- docker搭建ros-indigo-arm交叉编译环境
ROS运行环境:ARM ubuntu14.04 + ROS indigo在arm环境下编译ros应用程序,速度极慢,无法忍受,尝试在x86机器上搭建docker+ros交叉编译环境. 交叉编译环境的搭 ...
- 读深入了解c++内核对象模型小结(1/3/4)
之前早就听说这本书不错,如果想对c++进一步的了解可以看看,此书是进阶阶段参考,笔者自己看了书的第一.三.四章节,后面会继续. 第一章讲了c++的对象模型的引入,各种模型的对比和现在c++采 ...
- EF批量添加数据性能慢的问题的解决方案
//EF批量添加数据性能慢的问题的解决方案 public ActionResult BatchAdd() { using (var db = new ToneRoad.CEA.DbContext.Db ...
- 几个常用的CV知识点
刚结束一段实习,图像算法工程师.总结一下图像算法的几个基本的操作,图像操作算子各式各样,各显神通,光是滤波filter这一个专题就可以有很多的技巧和功能. 我从做过的两个小项目入手, 简单介绍一下该项 ...
- java8日期时间
###与时间有关的5个包* java.time* java.time.chrono* java.time.format* java.time.temporal* java.time.zone###ja ...
- Neural Style学习1——简介
该项目是Github上面的一个开源项目,其利用卷积神经网络的理论,参照论文A Neural Algorithm of Artistic Style,可以实现一种效果:两张图片,一张取其内容,另一张取其 ...
- 教你一招:win 7 或win 10右键菜单 添加获取管理员权限
当我们从经典的 windows XP 系统升级到 win 7 或 win 10,我们会发现,想要删除一些文件时,总是提示被占用或者是没有权限,很是烦恼. 这里,写下解决这个烦恼的办法,以安慰心里的不平 ...
- Leetcode 94. Binary Tree Inorder Traversal
Given a binary tree, return the inorder traversal of its nodes' values. For example:Given binary tre ...