最近在研究NSOperation、NSOperationQueue这2个类,其中走了不少的弯路,特此记录下来,一给自己增加印象,二给后来学习者提供点有用的资料。
NSOperation是个抽象类,并不能直接拿来用,要用得先继承它。苹果封装了NSInvocationOperation和NSBlockOperation这两个类,如果这两个类不能满足要求,我们也可以自己直接继承NSOperation,写个自己的操作类。
首先看NSOperation类中有个实例方法 - (void)cancel; 一开始以为可以取消所有的操作,但是实践证明,该方法只能取消已加入队列中,但还未运行的操作, 已经正在运行的操作是不能取消的。另NSInvocationOperation单独执行,不加入队列中,执行- (void)start; 方法是同步执行的,只有加入队列中才会并发执行。
NSOperationQueue其实就是个线程池,负责管理加入队列中的操作。队列中的操作是并发执行的。