Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/99.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c NSOperation-主方法在主线程上运行?_Objective C_Ios_Nsoperation - Fatal编程技术网

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

Objective c NSOperation-主方法在主线程上运行?,objective-c,ios,nsoperation,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 ma

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

您需要在
start
方法中设置自己的线程

摘自

开始
(必需)所有并发操作都必须重写此方法,并用自己的自定义实现替换默认行为。要手动执行操作,请调用其start方法。因此,此方法的实现是操作的起点,也是设置线程或其他执行环境以执行任务的地方。您的实现在任何时候都不能调用super


如果您将
NSOperation
添加到
NSOperationQueue
中,它会为您解决这一问题。

您需要在
start
方法中设置自己的线程

摘自

开始
(必需)所有并发操作都必须重写此方法,并用自己的自定义实现替换默认行为。要手动执行操作,请调用其start方法。因此,此方法的实现是操作的起点,也是设置线程或其他执行环境以执行任务的地方。您的实现在任何时候都不能调用super


如果您将
NSOperation
添加到
NSOperationQueue
中,它会为您解决这一问题。

通过NSOperationQueue启动操作是否会得到相同的行为?只是出于兴趣,[NSThread isMainThread]是否也会返回true?我不确定您的相等性测试。我尝试将该操作添加到NSOperationQueue,并在后台运行(不同的线程),但是否可以在单独的线程上运行该操作,而不将其添加到OperationQueue?@Senior yes[NSThread isMainThread]返回的trueTry将锁定主实现中的UI,以验证它是否确实在主线程上运行。通过NSOperationQueue启动操作是否会获得相同的行为?只是出于兴趣,[NSThread isMainThread]是否也返回true?我不确定您的相等性测试。我尝试将该操作添加到NSOperationQueue,并在后台运行(不同的线程),但是否可以在单独的线程上运行该操作,而不将其添加到OperationQueue?@Senior yes[NSThread isMainThread]返回的trueTry将锁定主实现中的UI,以验证它是否确实在主线程上运行。