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 に答える