2

非常简单的代码:

queue = [[NSOperationQueue alloc] init];
[queue addOperationWithBlock:^{
    NSLog(@"%@", [NSThread mainThread]? @"main" : @"not main");    
}];

打印“主要”。

为什么?除非我打电话,否则不是应该在 bg 线程中异步运行[NSOperationQueue mainQueue]吗?

4

1 回答 1

6

[NSThread mainThread]总是返回一个对象(因此YES在转换为 时会产生BOOL),因为程序运行时有一个主线程。

如果要检查当前线程是否是主线程,需要currentThread使用NSThread.

NSLog(@"%@", [[NSThread currentThread] isEqual:[NSThread mainThread]] 
      ? @"main" : @"not main");

NSThread有更好的方法;看来您可以使用该isMainThread方法检查当前线程是否是主线程:

if ([[NSThread currentThread] isMainThread]) {
   //
}

正如用户@borrrden 指出的那样,您只需要使用[NSThread isMainThread],

if([NSThread isMainThread]){
   //
}

请参阅NSThread文档

于 2013-01-14T03:56:35.337 回答