文档章节

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
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中的 ⬇️方法进行计算。 但是系统计算...

侯航磊
11/08
0
0

没有更多内容

加载失败,请刷新页面

加载更多

【转载】缓存穿透,缓存击穿,缓存雪崩解决方案分析

前言 设计一个缓存系统,不得不要考虑的问题就是:缓存穿透、缓存击穿与失效时的雪崩效应。 缓存穿透 缓存穿透是指查询一个一定不存在的数据,由于缓存是不命中时被动写的,并且出于容错考虑...

xiaomin0322
13分钟前
0
0
Maven: Non-resolvable import POM:Failure to find *** in *** was cached in the local repository.

clean or package spring cloud 项目时,IDE 打印如下报错: Non-resolvable import POM: Failure to find org.springframework.cloud:spring-cloud-dependencies:pom:Greenwich.M3 in https......

AmosWang
16分钟前
0
0
性能优化(性能优化概述)

软件系统质量特性 安全性 同时兼顾向合法用户提供服务,以及阻止非授权使用软件及资源的能力。 健壮、可靠 软件系统在一定的时间内无故障运行的能力、容错能力、恢复能力 。 可用性、易用性、...

这很耳东先生
20分钟前
0
0
ZooKeeper命令大全

创建节点 # 创建节点,-s表示顺序节点,-e表示临时节点,默认是持久节点create [-s] [-e] path data acl # 示例create /zk-book 123 查看节点 ls path [watch] # 示例ls /zk-book 获取...

爱宝贝丶
30分钟前
2
0
Elasticsearch节点角色类型node.master和node.data说明s

一般地,ElasticSearch集群中每个节点都有成为主节点的资格,也都存储数据,还可以提供查询服务。这些功能是由两个属性控制的(node.master和node.data)。默认情况下这两个属性的值都是tru...

傲娇字符
46分钟前
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部