文档章节

cell 网络数据缓存

BKF_
 BKF_
发布于 2016/02/27 02:08
字数 452
阅读 15
收藏 0

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];
}

源码👈

© 著作权归作者所有

共有 人打赏支持
BKF_
粉丝 1
博文 21
码字总数 4291
作品 0
广州
iOS开发-你真的会用SDWebImage?

iOS开发-你真的会用SDWebImage? SDWebImage作为目前最受欢迎的图片下载第三方框架,使用率很高。但是你真的会用吗?本文接下来将通过例子分析如何合理使用SDWebImage。 使用场景:自定义的U...

法斗斗
2016/06/01
84
0
MDKAutoLayoutHeight 自动化UITableviewCell高度计算工具

写这个工具的缘由 最近的业务需求要改一个很古老的界面:全部内容都是由frame实现,没有xib,没有autolayout,并且高度是通过手动计算每个控件的内容加起来返回的,而且根据网络请求的数据会有四种...

庄msia
06/10
0
0
实现异步下载网络图片

1数据准备, 建立一个appInfo模型 ,在视图控制器中懒加载数组,实现字典转模型,加载模型数组 NSMutableArray *data = [NSMutableArray array]; NSMutableArray *list = [NSMutableArray arrayW...

就不穿小内
2015/12/25
90
0
SDWebImage详细使用

SDWebImage托管在github上。https://github.com/rs/SDWebImage 这个类库提供一个UIImageView类别以支持加载来自网络的远程图片。具有缓存管理、异步下载、同一个URL下载次数控制和优化等特征...

xiaobai1315
2016/08/26
9
0
提高自己应用性能的总结架构篇

OK ,为什么会写这篇文章呢?因为最近接触老一些面试者,总感觉他们认为做应用只是纯粹的搭个界面,殊不知不仅仅如此。 我们从哪几个方面来测试应用的性能呢? 这里,因为没用真机来调试所以...

人魔七七
2016/03/06
0
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周一乱弹 —— 鱼生不值得

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @瘟神灬念:分享新裤子的单曲《没有理想的人不伤心 (Remix版)》: 《没有理想的人不伤心 (Remix版)》- 新裤子 手机党少年们想听歌,请使劲儿戳...

小小编辑
23分钟前
9
4
arts-week10

Algorithm 905. Sort Array By Parity - LeetCode Review Who’s Afraid of the Big Bad Preloader? 一文读懂前端缓存 一个网络请求3个步骤:请求,处理,响应,而前端缓存主要在请求处响应这两步...

yysue
今天
4
0
00.编译OpenJDK-8u40的整个过程

前言 历经2天的折腾总算把OpenJDK给编译成功了,要说为啥搞这个,还得从面试说起,最近出去面试经常被问到JVM的相关东西,总感觉自己以前学的太浅薄,所以回来就打算深入学习,目标把《深入理...

凌晨一点
今天
5
1
python: 一些关于元组的碎碎念

初始化元组的时候,尤其是元组里面只有一个元素的时候,会出现一些很蛋疼的情况: def checkContentAndType(obj): print(obj) print(type(obj))if __name__=="__main__": tu...

Oh_really
昨天
6
2
jvm crash分析工具

介绍一款非常好用的jvm crash分析工具,当jvm挂掉时,会产生hs_err_pid.log。里面记录了jvm当时的运行状态以及错误信息,但是内容量比较庞大,不好分析。所以我们要借助工具来帮我们。 Cras...

xpbob
昨天
183
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部