文档章节

cell 网络数据缓存

BKF_
 BKF_
发布于 2016/02/27 02:08
字数 452
阅读 15
收藏 0
点赞 1
评论 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 ⋅ 0

实现异步下载网络图片

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

就不穿小内 ⋅ 2015/12/25 ⋅ 0

SDWebImage详细使用

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

xiaobai1315 ⋅ 2016/08/26 ⋅ 0

提高自己应用性能的总结架构篇

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

人魔七七 ⋅ 2016/03/06 ⋅ 0

lazy懒加载(延迟加载)UITableView

举个例子,当我们在用网易新闻App时,看着那么多的新闻,并不是所有的都是我们感兴趣的,有的时候我们只是很快的滑过,想要快速的略过不喜欢的内容,但是只要滑动经过了,图片就开始加载了,这样用户...

humingtao2013 ⋅ 2014/06/18 ⋅ 0

iOS性能优化的初步体验

解决方案 1. 正确使用reuseIdentifier UITableView中UITableViewCell重用 UITableView中UITableViewHeaderFooterViews的重用, UITableViewHeaderFooterViews为Section的Header或者Footer。 ......

-Man ⋅ 2016/11/04 ⋅ 1

UITableView方法的执行顺序流畅性优化

(一)、UITableView的执行顺序 numberOfSectionsInTableView(确定有几组) -> numberOfRowsInSection(确定每组有多少的行) -> heightForRowAtIndexPath(确定每行cell的高度) 以上信息确定完毕...

朝雨晚风 ⋅ 2017/10/23 ⋅ 0

tableViewCell cell 图片网络下载的 基本处理原理

#import "HMAppsViewController.h" #import "HMApp.h" @interface HMAppsViewController () /** * 所有的应用数据 / @property (nonatomic, strong) NSMutableArray apps; / * 存放所有下载操......

Daniel_s ⋅ 2015/12/03 ⋅ 0

优化UITableViewCell高度计算的那些事

我是前言 这篇文章是我和我们团队最近对 UITableViewCell 利用 AutoLayout 自动高度计算和 UITableView 滑动优化的一个总结。 我们也在维护一个开源的扩展,UITableView+FDTemplateLayoutCel...

SunGiantor ⋅ 2015/05/21 ⋅ 2

使用 Three20 的经验分享

记:Three20(简称:TT)是Facebook维护的一个开 源iPhone应用框架。框架封装了一系列视觉控件,网络组件,和工具方法。最近使用TT重构了一个app,这个app在1万行规模使用的是原生代码,架 ...

乌邦托 ⋅ 2011/08/03 ⋅ 2

没有更多内容

加载失败,请刷新页面

加载更多

下一页

知乎Java数据结构

作者:匿名用户 链接:https://www.zhihu.com/question/35947829/answer/66113038 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 感觉知乎上嘲讽题主简...

颖伙虫 ⋅ 今天 ⋅ 0

Confluence 6 恢复一个站点有关使用站点导出为备份的说明

推荐使用生产备份策略。我们推荐你针对你的生产环境中使用的 Confluence 参考 Production Backup Strategy 页面中的内容进行备份和恢复(这个需要你备份你的数据库和 home 目录)。XML 导出备...

honeymose ⋅ 今天 ⋅ 0

JavaScript零基础入门——(九)JavaScript的函数

JavaScript零基础入门——(九)JavaScript的函数 欢迎回到我们的JavaScript零基础入门,上一节课我们了解了有关JS中数组的相关知识点,不知道大家有没有自己去敲一敲,消化一下?这一节课,...

JandenMa ⋅ 今天 ⋅ 0

火狐浏览器各版本下载及插件httprequest

各版本下载地址:http://ftp.mozilla.org/pub/mozilla.org//firefox/releases/ httprequest插件截至57版本可用

xiaoge2016 ⋅ 今天 ⋅ 0

Docker系列教程28-实战:使用Docker Compose运行ELK

原文:http://www.itmuch.com/docker/28-docker-compose-in-action-elk/,转载请说明出处。 ElasticSearch【存储】 Logtash【日志聚合器】 Kibana【界面】 答案: version: '2'services: ...

周立_ITMuch ⋅ 今天 ⋅ 0

使用快嘉sdkg极速搭建接口模拟系统

在具体项目研发过程中,一旦前后端双方约定好接口,前端和app同事就会希望后台同事可以尽快提供可供对接的接口方便调试,而对后台同事来说定好接口还仅是个开始、设计流程,实现业务逻辑,编...

fastjrun ⋅ 今天 ⋅ 0

PXE/KickStart 无人值守安装

导言 作为中小公司的运维,经常会遇到一些机械式的重复工作,例如:有时公司同时上线几十甚至上百台服务器,而且需要我们在短时间内完成系统安装。 常规的办法有什么? 光盘安装系统 ===> 一...

kangvcar ⋅ 昨天 ⋅ 0

使用Puppeteer撸一个爬虫

Puppeteer是什么 puppeteer是谷歌chrome团队官方开发的一个无界面(Headless)chrome工具。Chrome Headless将成为web应用自动化测试的行业标杆。所以我们很有必要来了解一下它。所谓的无头浏...

小草先森 ⋅ 昨天 ⋅ 0

Java Done Right

* 表示难度较大或理论性较强。 ** 表示难度更大或理论性更强。 【Java语言本身】 基础语法,面向对象,顺序编程,并发编程,网络编程,泛型,注解,lambda(Java8),module(Java9),var(...

风华神使 ⋅ 昨天 ⋅ 0

Linux系统日志

linux 系统日志 /var/log/messages /etc/logrotate.conf 日志切割配置文件 https://my.oschina.net/u/2000675/blog/908189 logrotate 使用详解 dmesg 命令 /var/log/dmesg 日志 last命令,调......

Linux学习笔记 ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部