NSOperation的并发和非并发有什么区别呀?

zyhiang0909 发布于 2013年10月18日
无人欣赏。

是不是加入Queue的都是并发,不加入queue单独使用的都是非并发?菜鸟寻求大神指点...

共11条回复
zhangmeteor 回复于 2013年10月18日

NSOperation难道不是个队列?

zyhiang0909 回复于 2013年10月18日

1楼 @zhangmeteor NSOperationQueue是个队列吧。。。

zhangmeteor 回复于 2013年10月18日

2楼 @zyhiang0909 嗯嗯。。我就是那个意思- -|

zyhiang0909 回复于 2013年10月19日

3楼 @zhangmeteor 那并发和非并发到底是什么区别呢

zyhiang0909 回复于 2013年10月21日

@tinyfool 其实我很不好意思来@你。。。

tinyfool 回复于 2013年10月21日

@sycx

bluemigrant 回复于 2013年10月21日

NSOperation的并发和非并发是指在一个operation运行的过程中,所有需要处理的任务是单线程的还是异步的。

sycx 回复于 2013年10月21日

NSOperation默认是非并发的,当你调用-[NSOperation start]方法时,该方法会等任务结束才会返回;

并发的NSOperation是指,当你调用-[NSOperation start]后,NSOperation会在非当前线程(建立一个NSThread,或是dispatch async等)执行任务,并在任务结束之前就返回;

需要注意的是,并发行为都需要你自己实现,若要实现并发,你需要做很多额外的工作:

  1. 你需要创建一个subclass
  2. 除了重载main方法,实现并发你还需要至少重载start,isConcurrent,isExecuting,isFinished四个方法
  3. start里,创建Thread或者调用一个异步函数
  4. 更新isExecuting,并且发送相应KVO消息
  5. 任务结束后,你还得更新isExecutingisFinished,发送相应KVO消息

实现一个并发的NSOperation比较少见,具体如何实现,可以读读文档: NSOperation Class Reference


大多数情况下NSOperation都设计成非并发,这样实现起来会简单很多;

并且,一般会配合NSOperationQueue使用,由NSOperationQueue来负责执行NSOperation,而非直接调用-[NSOperation start]

若有复杂任务需要并发执行,一般也是拆成多个NSOperation,由NSOperationQueue并发的执行多个NSOperation

zyhiang0909 回复于 2013年10月22日

8楼 @sycx 清晰明了!!谢谢大神!

敏感字符 回复于 2013年10月22日

8楼 @sycx 专业回复……

Hector 回复于 2014年03月03日

加入NSOperationQueue的都是并发;没加入NSOperationQueue的可以是并发也可以是非并发。 非并发只需要重载main方法;并发至少需要重载start、isConcurrent、isExecuting、isFinished等四个方法。

本帖有11个回复,因为您没有注册或者登录本站,所以,只能看到本帖的10条回复。如果想看到全部回复,请注册或者登录本站。

登录 或者 注册
[顶 楼]
|
|
[底 楼]
|
|
[首 页]