2013-02-02 27 views
2

创建NSOperation并将其放入NSOperationQueue时,我从不会看到main()被调用。只有start()被调用。我没有做任何事情,真的。作为一个简单的测试,我写了这个:未在非并发中调用main()NSOperation

NSOperationQueue *testOperationQueue = [[NSOperationQueue alloc] init]; 
MyTestOperation *testOperation = [[MyTestOperation alloc] init]; 
[testOperationQueue addOperation:testOperation]; 
在MyTestOperation.m

- (void)main 
{ 
    NSLog(@"testing if main is getting called"); 
} 

- (void)start 
{ 
    NSLog(@"testing if start is getting called"); 
} 

MyTestOperation.h看起来是这样的:

#import <Foundation/Foundation.h> 

@interface MyTestOperation : NSOperation 

@end 

我失去了一些东西明显?

[编辑注:我其实是不同步,不同步(如写的一个标题)。]

+0

“MyTestOperation”的“'@ interface'”.h文件是什么样的? –

+0

我已经包含了上面的MyTestOperation.h。 – ayl

回答

6

我与您的代码打四周,注意到,如果我评论了你start方法完全的main方法会运行。更仔细地阅读start的文件后,我发现这条线:

此方法的默认实现更新操作的执行状态,并调用接收器的main方法。

因此,通过覆盖start与实现,没叫main,您可以有效地短路操作,决不允许它真正开始工作!因此,您需要在start方法中明确调用main,或者如果您没有真正使用start来设置/更新执行状态等,则需要全部取消start

+0

是的。我试了一下,只是覆盖了main(left start()out),现在main被调用了。感谢您的澄清! – ayl

相关问题