cell 网络数据缓存
2016-02-27 00:00
781 查看
摘要: 缓存 cache:为了提高数据加载速度。
计算机存储器结构(低到高):磁盘-内存-cache-寄存器->cpu。
网络:云端-磁盘-内存-cache-寄存器->cpu。
从左到右访问数据:访问速度⬆️,存储空间⬇️
0.数据存储结构:
缓存 cache:为了提高数据加载速度。
计算机存储器结构(低到高):磁盘-内存-cache-寄存器->cpu。
网络:云端网络-磁盘-内存-cache-寄存器->cpu。
从左到右访问数据:访问速度⬆️,存储空间⬇️
1.网络存储器-->内存
1.1,网络数据异步下载,更新UI.数据从网络到达内存中。
gcd这样:
1.2.或者NSOperation这样
2.添加内存索引
2.1.添加图片数据索引:
因为单纯的下载数据,导致反复刷新tableView的时候,又会下载 data。
所以使用 dictory记录,(key = url,value=image)。
每当 赋值image的时候从 dic中查找。
2.2.添加线程索引:
进行中的线程,还没有把数据下载完。所以使用 dict记录下载线程,(key = url,value=operation)
每当要开启线程的时候,先从 dict中查找线程。
3.内存——沙盒
3.1.下载完成后,更新UI,将image写入沙盒(文件名是url最后的一段,为了是和服务器中文件名一致)
源码👈
计算机存储器结构(低到高):磁盘-内存-cache-寄存器->cpu。
网络:云端-磁盘-内存-cache-寄存器->cpu。
从左到右访问数据:访问速度⬆️,存储空间⬇️
0.数据存储结构:
缓存 cache:为了提高数据加载速度。
计算机存储器结构(低到高):磁盘-内存-cache-寄存器->cpu。
网络:云端网络-磁盘-内存-cache-寄存器->cpu。
从左到右访问数据:访问速度⬆️,存储空间⬇️
1.网络存储器-->内存
1.1,网络数据异步下载,更新UI.数据从网络到达内存中。
gcd这样:
dispatch_async(dispatch_get_global_queue(0, 0), ^{ NSURL *url = [NSURL URLWithString:urlStr]; NSData *data = [NSData dataWithContentsOfURL:url]; UIImage *img = [UIImage imageWithData:data]; dispatch_async(dispatch_get_main_queue(), ^{ cell.imageView.image = img; }); });
1.2.或者NSOperation这样
NSOperationQueue *queue = [[NSOperationQueue alloc]init]; NSBlockOperation *operation = [NSBlockOperation blockOperationWithBlock:^{ NSURL *url = [NSURL URLWithString:urlStr]; NSData *data = [NSData dataWithContentsOfURL:url]; UIImage *img = [UIImage imageWithData:data]; [[NSOperationQueue mainQueue] addOperationWithBlock:^{ cell.imageView.image = img; }]; }]; [queue addOperation:operation];
2.添加内存索引
2.1.添加图片数据索引:
因为单纯的下载数据,导致反复刷新tableView的时候,又会下载 data。
所以使用 dictory记录,(key = url,value=image)。
每当 赋值image的时候从 dic中查找。
2.2.添加线程索引:
进行中的线程,还没有把数据下载完。所以使用 dict记录下载线程,(key = url,value=operation)
每当要开启线程的时候,先从 dict中查找线程。
3.内存——沙盒
3.1.下载完成后,更新UI,将image写入沙盒(文件名是url最后的一段,为了是和服务器中文件名一致)
- (void) writeDataToSandBox:(NSString *)urlStr withData:(NSData *)data { NSFileManager *fileManager = [NSFileManager defaultManager]; NSString *imgFileName = [urlStr lastPathComponent]; NSString *cachesPath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject]; NSString *path = [cachesPath stringByAppendingString:@"/icon/"]; if (![fileManager fileExistsAtPath:path]) { [fileManager createDirectoryAtPath:path withIntermediateDirectories:YES attributes:NULL error:NULL]; } NSString *fullPath = [path stringByAppendingString:imgFileName]; [data writeToFile:fullPath atomically:YES]; }
源码👈
相关文章推荐
- 自己综合的一个常用下载和上传工具类:HttpClientUtils(18)
- Netty精粹之TCP粘包拆包问题
- I/O复用的高级应用三:同时处理TCP和UDP服务
- Android中不能使用HttpClient了
- HTTP Live Streaming for iPhone/iPad(HLS流媒体服务器)
- http://www.cnblogs.com/yjf512/p/3164400.html
- Charles 3.11.2 手机代理查看HTTPS方法
- http://www.oschina.net/translate/elasticsearch-getting-started?cmp
- TCP三次握手的简单理解
- static class 静态类(Java)http://blog.sina.com.cn/s/blog_605f5b4f0100zbps.html
- iOS开发网络篇—简单介绍ASI框架的使用
- 安卓开发——关于图片的三级缓存策略(内存LruCache+磁盘DiskLruCache+网络Volley)
- Abstract(抽象)可以修饰类、方法 http://www.cnblogs.com/suneryong/p/3571362.html
- 使用GraphViz画caffe的网络结构图
- 【BZOJ2127】happiness(网络流dinic)
- TCP/IP详解--滑动窗口与内核缓冲区之间的关系
- mac上使用tcpdump抓iPhone 设备的数据包
- Android如何获取网络上的图片并且显示在ImageView上
- 处理多个网络请求的并发的情况
- [Python]网络爬虫(四):Opener与Handler的介绍和实例应用