NSOperation - main方法在主线程上运行?

时间:2011-11-22 19:06:23

标签: objective-c ios nsoperation

为什么我的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;
}

1 个答案:

答案 0 :(得分:3)

您需要在start方法

中设置自己的主题

摘自Concurrency Programming Guide

的摘录
  

开始
  (必需)所有并发操作必须覆盖此方法,并将默认行为替换为自己的自定义实现。要手动执行操作,请调用其start方法。因此,此方法的实现是操作的起点,也是设置执行任务的线程或其他执行环境的位置。您的实施不得随时致电超级。

如果您将NSOperation添加到NSOperationQueue,则会为您解决此问题。