想象一下,我有一个微调,我必须启用相对较重的事情,然后在任务完成后关闭微调器。做一个需要更新屏幕的任务
如果我做的:
[mySpinner startAnimating];
[self doSomethingHeavy];
[mySpinner stopAnimating];
我将永远不会看到微调运行,因为doSomethingHeavy将锁的线程,绝不让微调表演。
我试图在主线程上使用Grand Central Dispatch for the spinner在另一个任务中尝试启动一个新的队列,但结果是一样的。没有微调运行。
只有这样,才能使其正常工作是一个延迟火的方法,使用
[self performSelector:@selector(doSomethingHeavy) withObject:nil afterDelay:0.02];
但是这听起来更像是一个黑客,如果我把[mySpinner stopAnimating]该行之后,任务完成前可能会停止微调。
这不仅适用于微调器,而且适用于需要屏幕更新的任何任务。