转自:https://www.jianshu.com/p/73b5f5dda06a
-
同步与异步函数:
1.1 同步函数:NSOperation中,任务的start方法是同步函数,start是让任务在当前线程中同步串行执行,并且调用内部的main方法
a 如果要让任务在当前线程执行,就直接创建任务并start,而不是加入到队列中1.2 异步函数:NSOperationQueue都是异步函数。加入到NSOperationQueue中的任务,内部会调用start方法,让任务在当前线程中同步串行执行,并且调用内部的main方法 1.3 NSBlockOperation追加任务也是在新开线程执行,是特例。
02 NSOperation的队列:
1. 主队列的任务在主线程中执行(同GCD);
2. 非主队列的任务同时具备串行和并发的能力,通过最大并发数设置队列模式(串行?并发)。
1.NSOperation和GCD的对比?
1) GCD是纯C语言的API,而操作队列则是Object-C的对象。
2)在GCD中,任务用块(block)来表示,而块是个轻量级的数据结构;
相反操作队列中的『操作』NSOperation则是个更加重量级的Object-C对象。
操作队列的好处有:
1)NSOperationQueue可以方便的调用cancel方法来取消某个操作,而GCD中的任务是无法被取消的(安排好任务之后就不管了)。
2)NSOperation可以方便的指定操作间的依赖关系。
3)NSOperation可以通过KVO提供对NSOperation对象的精细控制。
4)NSOperation可以方便的指定操作优先级。
5)通过自定义NSOperation的子类可以实现操作重用。