我在後臺線程中運行數學計算。試圖在UITextView中實時發佈結果。但是,直到後臺線程完成後纔會顯示結果。爲什麼不?當後臺線程繁忙時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
}
這實際上並沒有,直到我開始嘗試過太大的問題滾動視圖。痛苦地緩慢。所以我創建了一個NSTimer來定期滾動UITextView。但是,即使計時器彈出並且該方法運行以請求滾動,UITextView也不會滾動,直到後臺方法完成。
您不在後臺執行。當你阻塞主線程時,UI只會凍結。 – jakenberg