2

我想在当前执行的线程上同步执行一个 NSOperation。我可以直接调用 [NSOperation start] 吗?这是否总是在当前执行的线程中运行?

另一种方法是只创建一个 NSOperationQueue,添加操作,然后调用 waitUntilAllOperationsFinished 选择器。

4

1 回答 1

4

如果调用[NSOperation start],它将在当前线程上同步执行。围绕操作的所有异步工作都由 处理NSOperationQueue,但如果您调用-start自己,那么您将绕过所有这些。

当然,NSOperation可以实现一个特定的子类来在另一个线程上产生一个异步任务本身;这完全取决于它。但是,设计为在操作队列运行的任何线程中同步执行的操作,如果您调用-start.


例如,以下代码在运行时:

NSOperation *op = [NSBlockOperation blockOperationWithBlock:^{
    NSLog(@"operation");
}];
[op start];
NSLog(@"complete");

印刷:

operation
complete
于 2012-12-13T03:07:19.237 回答