Objective c NSOperation-主方法在主线程上运行?
为什么我的NSOperation子类在主线程上运行main方法?我希望它异步运行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
@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,以验证它是否确实在主线程上运行。