web-dev-qa-db-ja.com

iOS-メインスレッドでの実行を保証する

メインスレッドfunctionを呼び出す方法を知りたい。

メインスレッドfunctionが確実に呼び出されるようにするにはどうすればよいですか?

(これは以前の 質問 に続きます)。

71
user236739

私のアプリがメインスレッドで自分のコードを実行することを確認するために従うことができるルールはありますか?

通常、これを保証するために何もする必要はありません。通常、物事のリストで十分です。スレッドを生成してバックグラウンドでコードを実行するAPIを操作しない限り、メインスレッドで実行されます。

本当に確認したい場合は、次のようなことができます

[self performSelectorOnMainThread:@selector(myMethod:) withObject:anObj waitUntilDone:YES];

メインスレッドでメソッドを実行します。 (GCDに相当するものもあります。)

46
Amy Worrall

これはそれを行います:

[[NSOperationQueue mainQueue] addOperationWithBlock:^ {

   //Your code goes in here
   NSLog(@"Main Thread Code");

}];

お役に立てれば!

161
shoughton123

iOS> = 4を使用している場合

dispatch_async(dispatch_get_main_queue(), ^{
  //Your main thread code goes in here
  NSLog(@"Im on the main thread");       
});
132
CarlJ

私はこれがクールだと思いますが、一般的には、正しいスレッドで呼び出されることを保証する責任があるメソッドの呼び出し元を残すのに良い形です。

if (![[NSThread currentThread] isMainThread]) {
    [self performSelector:_cmd onThread:[NSThread mainThread] withObject:someObject waitUntilDone:NO];
    return;
}
10
Sean Danzeiser