文档章节

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

源码👈

© 著作权归作者所有

上一篇: 单例模式 OC
下一篇: Xcode 配置问题
BKF_
粉丝 1
博文 21
码字总数 4291
作品 0
广州
私信 提问
iOS开发-你真的会用SDWebImage?

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

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

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

庄msia
2018/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
UITableViewCell的高度缓存

让UITableViewCell高度自适应的方法有两种 1、对UITableView进行设置 2、通过代理返回 使用自适应高度时,在Cell每次即将被展示出来的时候都会调用Cell中的 ⬇️方法进行计算。 但是系统计算...

侯航磊
2018/11/08
0
0

没有更多内容

加载失败,请刷新页面

加载更多

kubernetes API 访问控制在阿里云容器服务(ACK)上的实践

提起K8s API的访问控制,很多同学应该都会想到RBAC,这是K8s用来做权限控制的方法,但是K8s对API的访问控制却不止于此,今天我们就来简单介绍下K8s的访问控制以及ACK如何利用这套方法提供便捷...

zhaowei121
26分钟前
1
0
从HelloWorld看Knative Serving代码实现

概念先知 官方给出的这几个资源的关系图还是比较清晰的: 1.Service: 自动管理工作负载整个生命周期。负责创建route,configuration以及每个service更新的revision。通过Service可以指定路由流...

迷你芊宝宝
27分钟前
1
0
如何防止http请求数据被篡改

故事的开始,面试官问了我一个问题: 如何防止http请求中数据被篡改? 回答: 1.设置客户端IP黑/白名单 1.1.客户端所有请求,请求到代理服务器(nginx),代理服务器维护黑/白名单的ip,决定是...

太猪-YJ
31分钟前
1
0
好程序员大数据笔记之:Hadoop集群搭建

在学习大数据的过程中,我们接触了很多关于Hadoop的理论和操作性的知识点,尤其在近期学习的Hadoop集群的搭建问题上,小细节,小难点拼频频出现,所以,今天集中总结以下笔记,希望对各位同学...

好程序员IT
38分钟前
1
0
MySql用navcat连接时报错 2509

在8版本以后的MySql默认的加密方式都改为了caching_sha2_password 因此进入mysql的命令行更改加密方式即可 ALTER USER 'root'@'localhost' IDENTIFIED BY 'password' PASSWORD EXPIRE NEVER......

lanyu96
40分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部