正确使用NSInvocationOperation和NSOperationQueue

时间:2009-08-31 18:44:05

标签: iphone cocoa

我已经设置了一个操作队列和一个调用操作。我是否需要表明调用已完成?如果不是,操作队列将如何知道调用已完成并继续下一个调用?操作队列已设置为一次执行一个操作。

3 个答案:

答案 0 :(得分:3)

不,没有必要发出调用已完成的信号。当N isFinished属性设置为YES时,NSOperationQueue知道操作已完成。默认情况下,当操作的-main方法返回时会发生这种情况。

NSInvocationOperation的-main方法,出于所有意图和目的,只需调用其NSInvocation并返回,因此在调用完成后应立即将其isFinished标志设置为YES。

答案 1 :(得分:1)

文,

看起来你真正想要的是自己子类化NSOperation并在其中调用异步。当异步代码完成并且您获得回调时,您将通过KVO通知队列isExecuting并更新isFinished。在Dave Dribin的博客中详细解释了这一点:

http://www.dribin.org/dave/blog/archives/2009/05/05/concurrent_operations/

答案 2 :(得分:0)

NSInvocationOperation是自动的。你已经很好了。

如果您需要告知应用的其他部分操作已完成,您可以使用通知。确保通知转到正确的主题。在iPhone上,我将它们发送到主线程,因为我经常更改UI以响应通知,并且所有UI内容必须在主线程上发生。

[self performSelectorOnMainThread:@selector(postOpDoneNote) withObject:nil waitUntilDone:NO];

-(void) postOpDoneNote
{
    [[NSNotificationCenter defaultCenter] postNotificationName:@"someOpDone" object:self];
}