GCD与NSOperation

2018-04-01  本文已影响21人  8fe8946fa366

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实现的

上一篇下一篇

猜你喜欢

热点阅读