想象一下,我有一個微調,我必須啓用相對較重的事情,然後在任務完成後關閉微調器。做一個需要更新屏幕的任務
如果我做的:
[mySpinner startAnimating];
[self doSomethingHeavy];
[mySpinner stopAnimating];
我將永遠不會看到微調運行,因爲doSomethingHeavy將鎖的線程,絕不讓微調錶演。
我試圖在主線程上使用Grand Central Dispatch for the spinner在另一個任務中嘗試啓動一個新的隊列,但結果是一樣的。沒有微調運行。
只有這樣,才能使其正常工作是一個延遲火的方法,使用
[self performSelector:@selector(doSomethingHeavy) withObject:nil afterDelay:0.02];
但是這聽起來更像是一個黑客,如果我把[mySpinner stopAnimating]該行之後,任務完成前可能會停止微調。
這不僅適用於微調器,而且適用於需要屏幕更新的任何任務。