2013-01-14 105 views
2

非常簡單的代碼:爲什麼在主線程上運行?

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

版畫 「主」。

爲什麼?是不是假設以異步方式在bg線程中運行,除非我撥打[NSOperationQueue mainQueue]

回答

6

[NSThread mainThread]總是返回一個對象(因此當轉換爲BOOL時產生YES),因爲程序運行時有一個主線程。

如果要檢查當前線程是否爲主線程,則需要使用currentThread方法NSThread

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

NSThread有更好的方法;看來你可以使用isMainThread方法來檢查當前線程是否是主線程或不:

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

以及用戶@borrrden指出的那樣,你只需要使用[NSThread isMainThread]

if([NSThread isMainThread]){ 
    // 
} 

請參閱NSThread documentation

+0

Ahhhh ...狗屎。我認爲它返回BOOL指示是否你正在從主線程調用或不。謝謝。 – 0xSina

+2

您只需要[[NSThread isMainThread]]。 – borrrden

+0

@borrrden哎呀..我怎麼會錯過?如果我將它添加到答案中,你介意嗎? – Krishnabhadra

相關問題