文档章节

oobjective_c 异步下载网络图片注意问题

小飞侠asd
 小飞侠asd
发布于 2016/01/07 15:47
字数 889
阅读 5
收藏 0

1.使用网络下载图片,如果使用同步任务方式,因为下载是耗时操作,这样会因为占用主线程而界面太卡,用户体验不高。

2.解决UItableView每次刷新界面都会重新下载数据问题?

    开辟一块内存空间用于缓存数据,具体方法为用一个字典作为属性,当每一个异步任务下载完成的时候,就把数据添加到字典,然后再创建异步任务之前去判断一下这个数据是否已经存在,如果存在,就直接使用,如果不存在,再去下载。

3.图片错位问题?

    产生原因:当有cell复用的问题的时候,就可能发生数据错位。这是因为图片要等到下载完成以后才能使用,这个时间可能比较漫长,难免用户在这段时间会滑动界面cell的数据还没下载完成就已经被放入缓存池中,刷新界面时这个cell就可能被放到其他的行了(这时候数据还在下载中),当对应的数据下载完成以后,数据就直接赋上来,这时候得到的图片已经不是当前行所需要要的图片了,这时就发生了数据错乱。

    解决办法:当下载完成以后不要直接使用,而是先保存到缓存中,再使用更新对应行的办法来重新调用设置cell样式的方法。根据2可知,由于数据已经存在了,可以直接使用,不需要再去创建新的任务了

4.如果由用户所处的环境网络信号太差,或是没有,程序会崩溃。

    产生原因:崩溃的原因是因为要下载得到的数据为nil,而字典和数组里面存取的对象都不能为nil,这样就出错啦。

    解决办法,在下载完成以后判断下载的数据是否为nil,如果是nil就不放入字典中

5.解决任务重复添加到队列的问题?

    产生原因:当网速比较慢时,子线程的下载耗时就比较长,当一个正在下载对应数据的cell不断的出现和消失在界面中时,每出现一次都会新建一个新的任务而添加到队列,造成重复下载问题。

解决办法:类似问题2中,可以用一个字典保存任务到内存中,在创建任务之前判断任务是否已经存在,如果存在,就不往下执行,如果不存在,再往下执行。但是,下载完成一定要将任务从字典中移除,一是可以节省内存,二是block代码块造成的循环引用问题(下面会解决这个问题)

6.block代码块造成的循环引用问题

产生原因:使用NSBlockOperation创建任务时,必然要用block代码块来保存任务代码,在block代码块中用到对象会造成引用计数器+1(ARC环境),其中就包括selfSelf肯定会对任务进行强引用,而任务中的block又对self进行强引用了,这就造成了循环引用。

    解决办法:将self定义为弱指针   __weak typeof(self) weakSelf = self;

 

 

 




















































© 著作权归作者所有

小飞侠asd
粉丝 1
博文 1
码字总数 889
作品 0
海淀
私信 提问
lazy懒加载(延迟加载)UITableView

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

humingtao2013
2014/06/18
0
0
AsyncTask用法和异步加载图片

AsyncTask:是Android提供的轻量级的异步类,可以直接继承AsyncTask,在类中实现异步操作,并提供接口反馈当前异步执行的程度(可以通过接口实现UI进度更新),最后反馈执行的结果给UI主线程。 As...

切切歆语
2016/11/16
8
0
IOS IPhone 开发需要的开源库[编辑中.. 不断更新]

前言 我是 java & php 程序员,遇到了坑爹的iPhone,被逼无奈在崩溃的边缘下学习object-c ,在学习中遇到了很多 奇葩,无知,龌蹉,呕吐的问题(弱弱的说 : 有的些问题到现在还不知道具体的原...

海参
2013/06/03
0
6
实现异步下载网络图片

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

就不穿小内
2015/12/25
90
0
Android异步下载图片并且缓存图片到本地

在Android开发中我们经常有这样的需求,从服务器上下载xml或者JSON类型的数据,其中包括一些图片资源,本demo模拟了这个需求,从网络上加载XML资源,其中包括图片,我们要做的解析XML里面的数...

liuher
2014/07/23
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Redux

Redux概念 Redux = Reducer + Flux,数据层框架,将所有数据都存储到store中 Redux的工作流程 Antd的使用 安装npm install antd --save import 'antd/dist/antd.css'import { Input, Butto......

星闪海洋
53分钟前
2
0
OSChina 周一乱弹 —— 你们谁看见了我的诺贝尔奖

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @脚板薯 :这么晚不睡只为找到一首歌,晚安。 ♫Say You Want Me♪ ♫Say You Want Me♪ - Augustana 手机党少年们想听歌,请使劲儿戳(这里)...

小小编辑
今天
210
14
我为什么要写微信公众号

埋一颗种子,细心呵护,静待她枝繁叶茂,葱郁参天 V2论坛上有个帖子【做程序员最重要的还是一定要有自己的作品】,作者写道: 能有一个作品和你的名字联系在一起,应当成为在职业生涯前期着意...

运维咖啡吧
今天
3
0
数据库

数据库架构 数据库架构可以分为存储文件系统和程序实例两大块,而程序实例根据不同的功能又可以分为如下小模块。 1550644570798 索引模块 常见的问题有: 为什么要使用索引 什么样的信息能成...

一只小青蛙
今天
5
0
PHP常用经典算法实现

<? //-------------------- // 基本数据结构算法 //-------------------- //二分查找(数组里查找某个元素) function bin_sch($array, $low, $high, $k){ if ( $low <= $high){ $mid = int......

半缘修道半缘君丶
昨天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部