0
[UIView animateWithDuration:1 animations:^{
self.animateView.frame = CGRectMake(100, 100, 50, 50);
} completion:^(BOOL finished) {
if (finished) {
NSLog(@"animation finished");
}
}];
[[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:1]];
NSLog(@"after runUntilDate");
上記のように多くのコードがあります。 runUntilDateの行にコメントするとどうなりますか?なぜアニメーション文の後にrunUntilDateを追加する必要がありますか?
更新: 最後に次の行(NSLog)を追加すると、アニメーションが終了するまで実行されません。 runUntilDateがメインスレッドをブロックするように見えるので、ここでスレッドをブロックする必要があるのはなぜですか?
なぜrunUntilDateがメインスレッドをブロックできるのですか?ここでメインスレッドをブロックする必要があるときは? – Sugite
runloopはメインスレッドで動作するため、理想的には、どんな場合でもメインスレッドをブロックしないでください。 – SerjOxo
runUntilDate runloopのもう1つの繰り返しを再起動するだけです。なぜスレッドブロッキングにつながるのですか?ソースレベルで説明できますか?ありがとうございます! – Sugite