为什么我的NSOperation子类在主线程上运行main方法?我希望它以异步方式运行。
@interface ServiceClient : NSOperation
@end
@implementation ServiceClient
- (void)main
{
if ([[NSThread currentThread] isEqual:[NSThread mainThread]])
{
NSLog(@"Why does this get called on the main thread");
}
}
@end
开始操作
ServiceClient *serviceClient = [[ServiceClient aloc] init];
[serviceClient start];
修改
文档建议覆盖isCuncurrent并返回yes,但该方法不会被调用。
- (BOOL)isConcurrent
{
return YES;
}
答案 0 :(得分:3)
您需要在start
方法
摘自Concurrency Programming Guide
的摘录开始强>
(必需)所有并发操作必须覆盖此方法,并将默认行为替换为自己的自定义实现。要手动执行操作,请调用其start方法。因此,此方法的实现是操作的起点,也是设置执行任务的线程或其他执行环境的位置。您的实施不得随时致电超级。
如果您将NSOperation
添加到NSOperationQueue
,则会为您解决此问题。