block
次の実行ループ反復で実行できるようにしたい。次の実行ループの最初または最後に実行されるかどうかはそれほど重要ではなく、現在の実行ループ内のすべてのコードの実行が完了するまで実行が延期されるだけです。
次の実行ループとインターリーブされるため、次の実行ループでコードが実行される可能性がありますが、実行されない可能性があります。
dispatch_async(dispatch_get_main_queue(),^{
//my code
});
以下は、上記と同じ問題を抱えていると思います。
dispatch_after(DISPATCH_TIME_NOW, dispatch_get_main_queue(), ^(void){
//my code
});
現在の実行ループの最後に配置されているため、次のように機能すると思います (間違っている場合は修正してください)。これは実際に機能しますか?
[self performSelector:@selector(myMethod) withObject:nil afterDelay:0];
0
間隔のあるタイマーはどうですか?ドキュメントには次のように記載If seconds is less than or equal to 0.0, this method chooses the nonnegative value of 0.1 milliseconds instead.
されています。これは、次の実行ループ反復での実行を保証することにつながりますか?
[NSTimer scheduledTimerWithTimeInterval:0 target:self selector:@selector(myMethod) userInfo:nil repeats:NO];
これが私が考えられるすべてのオプションですが、次の実行ループ反復で (メソッドを呼び出すのではなく) ブロックを実行することにはまだ近づいていません。