非常に単純なコード:
queue = [[NSOperationQueue alloc] init];
[queue addOperationWithBlock:^{
NSLog(@"%@", [NSThread mainThread]? @"main" : @"not main");
}];
「メイン」を出力します。
なんで?私が呼び出さない限り、bgスレッドで非同期に実行することを想定していません[NSOperationQueue mainQueue]
か?
非常に単純なコード:
queue = [[NSOperationQueue alloc] init];
[queue addOperationWithBlock:^{
NSLog(@"%@", [NSThread mainThread]? @"main" : @"not main");
}];
「メイン」を出力します。
なんで?私が呼び出さない限り、bgスレッドで非同期に実行することを想定していません[NSOperationQueue mainQueue]
か?
[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
ドキュメントを参照してください。