NSOperation会产生一个新线程吗?

时间:2011-05-12 14:04:20

标签: multithreading ios nsoperation nsoperationqueue

很简单,线程(或NSThread)和NSOperation之间是否存在一对一的连接?或者是抽象出一个操作是一种可以在后台由多个线程拾取和运行的任务?

1 个答案:

答案 0 :(得分:4)

不是一对一连接,不是。使用NSOperation子类的优点是您不需要自己管理多线程。 Apple甚至(令人困惑地)将典型的NSOperation子类(即,一个覆盖-main方法)定义为非并发,而不是因为它不支持并发,而是因为并发的细节由超类管理:

  

不要被术语混淆:仅仅因为操作是非并发的,并不意味着它不能同时执行,它只是意味着你不必自己处理并发。

从这个意义上说,NSOperation子类更像是NSThread的目标对象 detachNewThreadSelector:toTarget:withObject:

如果您想控制并发行为的方式,另一种方法是在调用-start之前覆盖-main并根据需要设置并发性。

以下是一个非常好的概述:Managing Concurrency with NSOperation