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 ...
随机推荐
- ReactNative新手学习之路03真机调试
React Native新手入门03真机调试(iOS) 从设备访问开发服务器 在启用开发服务器的情况下,你可以快速的迭代修改应用,然后在设备上查看结果.这样做的前提是你的电脑和设备必须在同一个wifi ...
- 屏蔽防止被别的网站嵌入框架代码(防止被人frame)
<SCRIPT LANGUAGE=javascript> if (top.location != self.location)top.location=self.location; < ...
- 聊聊 Web 项目二维码生成的最佳姿势
在设计和实现的过程之后,你永远不知道部署上去的程序会已什么样的姿势运行. 本篇借一次生成二维码逻辑的不同实现,阐述 Web 项目中二维码生成的正确姿势. 文中如有批量,欢迎各位看客老爷拍砖.试运行前5 ...
- 动画的使用—View Animation
View Animation定义了下面的四种动画效果: 缩放(scale).位移(translation).旋转(rotation).透明(alpha) 缩放动画: ScaleAnimation( ...
- Tp缓存
系统默认的缓存方式是采用File方式缓存,我们可以在项目配置文件里面定义其他的缓存方式,例如,修改默认的缓存方式为Xcache(当然,你的环境需要支持Xcache) 对于File方式缓存下的缓存目录下 ...
- spring 整合 mongo
spring 非常强大,不仅在jdbc访问提供了jdbctemplate,而且在mongo访问上提供了mongoTemplate.闲话不多说,下边开始整合mongoTemplate. ONE: 添加s ...
- PE启动菜单修改工具 MsgDiyer(GfxMenu Message制作工具) V2.0.3官方版
MsgDiyer基本功能 1.新建message文件.修改现有message文件:2.自定义背景图片:3.制作message字体,包括行高.大小等(目前不兼容WIN7):4.自定义字库:5.导入外置 ...
- mui消息框alert,confirm,prompt,toast
<script type="text/javascript" charset="utf-8"> //mui初始化 mui.init({ swipeB ...
- String()与 toString()
我们知道String()与 .toString()都是可以转换为字符串类型,但是String()与 .toString()的还是有区别的 1..toString()可以将所有的的数据都转换为字符串,但 ...
- BZOJ 4552: [Tjoi2016&Heoi2016]排序
4552: [Tjoi2016&Heoi2016]排序 Time Limit: 60 Sec Memory Limit: 256 MBSubmit: 579 Solved: 322[Sub ...