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)
我错过了一些明显的东西吗
[编辑注意:我实际上是指非并发,而不是并发(如前一个标题所述).
我玩了你的代码并注意到如果我start完全注释掉你的方法,那么该main方法就会运行.在仔细阅读文档后start,我发现了这一行:
此方法的默认实现更新操作的执行状态并调用接收方的
main方法.
因此,通过覆盖start未调用的实现main,您有效地将操作短路并且从未允许它实际开始工作!因此,您需要main在start方法中显式调用,或者start如果您实际上没有使用它来执行设置/更新执行状态/等,则需要全部消除.
| 归档时间: |
|
| 查看次数: |
1606 次 |
| 最近记录: |