main()未在非并发NSOperation中调用

ayl*_*ayl 2 objective-c nsoperation nsoperationqueue

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

NSOperationQueue *testOperationQueue = [[NSOperationQueue alloc] init];
MyTestOperation *testOperation = [[MyTestOperation alloc] init];
[testOperationQueue addOperation:testOperation];
Run Code Online (Sandbox Code Playgroud)

在MyTestOperation.m中:

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

- (void)start
{
  NSLog(@"testing if start is getting called");
}
Run Code Online (Sandbox Code Playgroud)

MyTestOperation.h看起来像这样:

#import <Foundation/Foundation.h>

@interface MyTestOperation : NSOperation

@end
Run Code Online (Sandbox Code Playgroud)

我错过了一些明显的东西吗

[编辑注意:我实际上是指非并发,而不是并发(如前一个标题所述).

Sea*_*ean 7

我玩了你的代码并注意到如果我start完全注释掉你的方法,那么该main方法就会运行.在仔细阅读文档后start,我发现了这一行:

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

因此,通过覆盖start未调用的实现main,您有效地将操作短路并且从未允许它实际开始工作!因此,您需要mainstart方法中显式调用,或者start如果您实际上没有使用它来执行设置/更新执行状态/等,则需要全部消除.