美文网首页
GCD与NSOperation

GCD与NSOperation

作者: 8fe8946fa366 | 来源:发表于2018-04-01 14:50 被阅读21次

    1.简单区别

    GCD是纯C语言的API,而NSOperation是oc对象,NSOperation的底层是用GCD来实现的。

    GCD中用block块来包装任务,而在NSOperation里用NSOperation对象来包装任务。

    NSOperation里也有队列的概念,就是NSOperationQueue,可以用block的方式把任务添加到队列里,addOperationWithBlock:

    NSOperationQueue有两种类型,主队列和非主队列。

    主队列:[NSOperationQueue mainQueue]; 和gcd中的主队列一样

    非主队列:[[NSOperationQueue alloc]init]; 同时具备并发和串行的功能,默认情况是并发队列

    2.什么样的场景适合用NSOperation

    1.取消某个任务

    在把任务NSOperation添加到NSOperationQueue之后,可以在NSOperation对象上调用cancel方法,在任务执行之前把任务取消,已经执行的任务无法取消。

    而通过块把任务添加到GCD以后没办法取消。

    2.指定操作间的依赖关系

    [opt1 addDependency opt2];opt2执行完以后再执行opt1

    ⚠️:多个队列间的操作也可以设置操作依赖,但是操作依赖不能循环,否则两个操作都无法执行。

    3.NSOperation对象的属性变化可以通过KVO来监控

    比如说可以监听isCancelled属性来判断任务是否已经取消,或者通过isFinished判断任务是不是已经完成。

    4.指定操作的优先级

    5.重用NSOperation对象

    因为NSOperation本身是一个oc对象,对象在运行过程中可以充分利用其中的信息,实现其它更复杂的操作。

    3.NSNotificationCenter就是用NSOperation实现的

    相关文章

      网友评论

          本文标题:GCD与NSOperation

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