简单的封装网络下载almofire(二)

3 篇文章 0 订阅
3 篇文章 0 订阅

 

    上一篇点击打开链接简单介绍了一下封装第三方的下载工作.只要对于初级阶段的需求已经够用了.如果对于高级的应用,比如下载一个音频,或者一个视频.需要获取下载的进度,并且如果当前这个资源正在下载就不需要重新连接了,那就要用到队列,下载队列,这样可以保证一个资源只下载一次,这一片可能有点长,耐心点看了.

    说到队列,我们第一个想到的一定是NSOperationQueue和NSOperation,对没错这是个很好的封装,而且也是官方推荐的,也是苹果的"亲儿子".好那我们就从他们的亲儿子说起.

    NSOperation就是一个线程,说道线程,有不明白的或者有困惑的自己先百度,这里主要讲下载,NSOperation是一个抽象类一般不直接使用它,而是使用它的子类,NSBLockOperation,和NSInvocationOperation,细心的同学可能会发 现,NSInvocationOperation在swfit中已经被废弃了,只剩下一个NSBLockOperation,但是我们也不用他,我们要自己定义一个下载 逻辑.

     好,我们还会用到上一次提交的那个类,上次那个类是继承了NSObject,这次我们让他继承,NSOperation.为了方便大家能有一个更加好理解,又能直观的看到,我就把代码直接粘贴出来,给大家一步一步的介绍.




     只能截取两张图了,屏幕有限还请谅解,废话少说了,言归正传.

     222:是定义一个保存下载资源的路径,如果下载成功,会自动保存到该路径下,如果没有指定目录,下面在说,六点悬念.

     223:下载的地址,

     224: 下载的进度,他是一个回调函数,是一个函数指针,是获取进度的.

     225:是下载结束后调用的方法

     226:是缓存记录当前已经下载的进度,这一个主要是用在,用户第一次点击下载的页面时,开始下载,用户返回其他页面再次进入时就需要用他这个参数了,可以直接告诉用户当前的进度,一般的话网络差的情况下这个作用就更加明显了,不用等到,224行执行,就可以直接查看进度.

     227:这是一个下载管理第三方的类,

     228:这个类一会会讲到,他主要是继承NSOperationQueue,是个下载队列,他是一个单例类,

     229:下载结束标志

     230:取消标志

     231:请求下载

     上面主要的属性介绍完了,下面该方法了,方法其实很简单,看名字 就知道什么意思了,不用多说,那么我就把大家需要注意的地方介绍一下.

      类方法createOperation,需要提示一下,这样创建了是为了方便以后使用,并且每次都是一个新的对象,也是为了保证线程安全.

      main()函数,这是必须重新实现的,为了实现自己的方法.

      259:行需要注意一下,如果当前的正在下载的资源别取消了,他是不会执行finishTask的,如果想执行自己可以把他放到最前边.根据需求

      这个结束的回调一般是在主线程了,如果要在子线程里调用,可以自己定义一个子线程.

      这样基本上一个操作已经完成.

      下面是NSOperationQueue,

       228行有个RequestManger,我刚说了他是NSOperationQueue的子类,那么他的实现又是怎么样的呢,下面来看他的实现.





    300:这是一个swift单例类的标准写法,也是比较有效而简单的,

    301:这是一个私有变量,是保存当前正在下载的队列操作.

    302:重写了只读属性operations

    307:定义为私有函数为了保证是只有一个对象.

    属性和单例类已经介绍完,至于为什么要用单利类,大家可以先思考一下.

    下面介绍方法,其实方法这个东西很有意思,他就像一条轨道一样,别人对于程序员来说,关注最多的就是方法的实现,他 是很重要的,虽然他并不是一条路,而是多条路哈哈.

    需要注意的地方是332行,这里必须判断,否则会出现意想不到的错误.相信大家都明白

方法addOperationReqest()需要注意一下,当这里队列里有了要请求的下载资源时,就不需要在加到队列里了,而是直接把队列里的用队列里的属性和方法,去实现新的方法和功能.

之次应该告一段落,了,还有个重要的问题,那就是使用,哈哈这个都写成这样了,估计一看就知道怎么使用,什么不知道.....大哭大哭好吧.如果想知道,可以留言,总之我认为,只要是肯学习,总会有办法的.方法总比困难多.

     结语: 

     刚才我说了为什么要定义一个单例类来管理下载,这时我突然想到一个比喻,也许不太准,但就是这个意思,我们知道我们所有的键盘都是一样的,不管是什么键盘,他们的排列顺序和排列位置都是一样的,字母的顺序我们都记住了,都不用看键盘都可打出来想要的字,如果突然顺序不一样了呢,那会怎么样呢,是不是很茫然,不知道该怎么打字了,还的再重新找到想要的字母,是不是很麻烦,只有统一不变了以后我们才不要想那么多,只要拿到键盘,他就这么打就行,不用管它是黑色的还是白色的.就是这个道理,第一简单,第二方便,第三,为了好用.不用关心那么型号的不一样的键盘.好像就是这个意思.哈哈编程也是很有意思的,希望大家努力.....微笑微笑

 

  



   

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值