美文网首页
自定义NSOperation利用NSURLSession、NSO

自定义NSOperation利用NSURLSession、NSO

作者: OCeasyLife | 来源:发表于2018-03-22 18:44 被阅读0次

    之二

    接上文

    代码Demo

    Github:SYDownloadManager

    4.如何实现TaskOperation的调度???

    没有实现一说,是自动调度的,只要设置最大并发数并将TaskOperation添加到Queue中就行了,只用记着在Session的Task完成的回调中调用该【TaskOperation completionTask】就行了

    SYDownloadTaskManager的一些方法

     下载任务完成的回调处理

    5.对SYDownloadTaskManager的介绍

    1.SYDownloadTaskModel 这个类主要是模型,记录下载任务的一些必要状态和信息以及实现归档操作

    2.SYDownloadTaskStore是存储Model以及实现数据缓存到本地的

    3.SYDownloadTaskOperation 是封装了NSURLSessionDataTask的自定义Operation

    4.SYDownloadTaskManager 是封装了NSURLSession,NSOperationQueue,SYDownloadTaskStore,实现并发下载,下载控制,数据流获取、储存,以及提供下载任务状态的核心类

    5.NSoperationQueue + SYDelayAddOperation,为Queue提供了额外的方法,以及解决了一些关键问题

    6. XXXoperation went isFinished == YES without being started by the queue it is in 问题的解决!!!!!

    这个错误的意思是:没有调用start方法,却改变了operation的状态(isFinished == YES)导致queue对operation的调度出现错乱

    1.什么操作导致这个问题?

     当一个Operation已经被Queue addOperation,此时由于Queue已经达到最大操作数,即,operationCount > maxConcurrentOperationCount。则这个Operation会处于ready状态,Queue会随时调度这个Operation,让其开始任务,即,Queue自动调用start方法。然而当Operation处于ready状态时,如果要取消(改变了Operation的状态),就会出现没start就finished的问题;

    2.如何解决这个问题??

    既然是因为Operation处于ready==YES时造成的,那就不让多余的Operation addOperation: 就可以了。这是NSoperationQueue + SYDelayAddOperation 就起作用了

    通过使用syDelay_addOperation: 将多余的添加到waitingOperations中即可,不多余的正常添加即可,再进行删除暂停操作就没事了

    但是此时会出现一个新问题,由于Queue中没有处于ready的Operation,Queue在已添加的Operation Finished == YES 后并不会自动开始下一个Operation,这就背离了使用NSOperationQueue实现Operation自动调度的初衷。。。。。。。

    3.如何解决不能自动调度的问题???

    如果我们可以在合适的时机,自己调用 addOperation 将waitingOperations中最早等待的Operation添加到Queue中就可以了。完美的思路!!!!!!

    啊哈哈哈,文档中表明NSOperationQueue 的operationCount可以使用KVO,只要监控operationCount  < maxConcurrentOperationCount ,将waitingOperations中的firstObject【Queue addOperation: firstObject】就可以使Queue的自动调度接续上。。。。。。

    以上问题解决。。。

    后续:之三

    相关文章

      网友评论

          本文标题:自定义NSOperation利用NSURLSession、NSO

          本文链接:https://www.haomeiwen.com/subject/hlaaqftx.html