教你如何封装异步网络连接nsurlconnection实现带有百分比的下载
注:本教程需要你对block有着较为深刻的理解,且对如何封装对象有着一些经验.
也许你已经用惯了afnetworking2.0,或者是asihttprequest(这个已经都不更新了,还不支持arc,放弃为妙^_^),或者还有其他轻量级的开源代码.用着是很爽,但有时候我们只想实现简单的功能,用不着那么复杂,而且,那些开源代码太多,我们很难理解,那就尝试一下自己封装一个简单的吧.
nsurlconnection有着两种类型的实现,一种是同步的:
使用非常简单,它直接根据request返回一个data给你,不过因为是同步的,会阻塞主线程,你可以将他放到线程中就能把它变成异步的了,很easy,自己尝试.
剩下的几种基本上都是异步的了,实现起来也很容易,继承几个协议实现几个方法而已嘛.
上面的这么多操作,你只完成了一个功能,那就是下载一张图片而已.
如果我们能把一个网络地址链接抽象成一个对象,而这个对象来处理所有的这些操作,不需要我们把它暴露出来,比如像下面的使用方式:
某某类 *对象1 = [初始化一个网址];
[对象1 开始执行网络请求];
[对象1 监测下载状况];
.......
像上面的使用方式,非常接近人的思维方式,给链接地址,开始下载,监控下载状况,我们就应该这么用嘛.
那我们就按照这种套路来设计我们的类了.
能初始化一个网址以及有一个开始操作:
如何才能够不用协议就可以获取到下载进度呢(监测下载状态),我们就用block当做属性来获取下载进度:
以下是一份完整的代码:
要下载东西我们需要能够存储数据,因为是下载,肯定也需要有网络链接,我们还需要知道下载数据期望的最大数值,要不然我们怎么表示进度呢?
基本思路就是这样子的,我们开始写代码了:
代码很简单,需要你对block有一定的了解,你拷贝如上两段代码到你的工程文件中,可以看看是怎么实现的.
现在来看看怎么使用:
比你之前直接用系统的那个nsurlconnection清爽了很多很多倍,对吧.
以下是下载图片时运行的截图:
只要你愿意,你想怎么封装就怎么封装,就是这么简单,自己动手,丰衣足食^_^.