NSOperation
默认是非并发的,当你调用-[NSOperation start]
方法时,该方法会等任务结束才会返回;
并发的NSOperation
是指,当你调用-[NSOperation start]
后,NSOperation
会在非当前线程(建立一个NSThread,或是dispatch async等)执行任务,并在任务结束之前就返回;
需要注意的是,并发行为都需要你自己实现,若要实现并发,你需要做很多额外的工作:
- 你需要创建一个
subclass
- 除了重载
main
方法,实现并发你还需要至少重载start
,isConcurrent
,isExecuting
,isFinished
四个方法 - 在
start
里,创建Thread
或者调用一个异步函数 - 更新
isExecuting
,并且发送相应KVO消息 - 任务结束后,你还得更新
isExecuting
和isFinished
,发送相应KVO消息
实现一个并发的NSOperation
比较少见,具体如何实现,可以读读文档: NSOperation Class Reference
大多数情况下NSOperation
都设计成非并发,这样实现起来会简单很多;
并且,一般会配合NSOperationQueue
使用,由NSOperationQueue
来负责执行NSOperation
,而非直接调用-[NSOperation start]
若有复杂任务需要并发执行,一般也是拆成多个NSOperation
,由NSOperationQueue
来并发的执行多个NSOperation