バックグラウンドスレッドで数学計算を実行しています。UITextView にリアルタイムで結果を投稿しようとしています。ただし、バックグラウンド スレッドが完了するまで結果は表示されません。なぜだめですか?
バックグラウンドでメソッドを起動し、
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0), ^() {
[self v2];
});
バックグラウンド スレッド メソッドの形式は、
- (void) v2 {
NSString *result;
// ... loop a bunch of times generating lots of results
for (bunch of stuff to compute) {
// If using dispatch_async, nothing is displayed until this method finishes
// If dispatch_sync then it does display and update
result = [self computeNextValue];
dispatch_async(dispatch_get_main_queue(), ^() {
textView.text = result;
});
} // end computation
}
ビューをスクロールしようとするまで、これは実際にはそれほど問題ではありませんでした。痛いほど遅い。そこで、UITextView を定期的にスクロールする NSTimer を作成しました。ただし、タイマーがポップし、スクロールを要求するメソッドが実行されても、バックグラウンド メソッドが完了するまで UITextView はスクロールしません。