为什么dispatch_async不好?有什么更好的方法来完成同样的任务?

时间:2013-02-15 03:38:49

标签: ios objective-c

     dispatch_async(dispatch_get_main_queue(), ^{
         [self.teamName becomeFirstResponder];
     });

我和一位朋友聊天,他告诉我他听说使用dispatch_async不是很好,但他不确定原因。

我在Google上查了一下,但没有找到任何理由说明此代码错误

如何改进此代码?有更好的方法吗?

注意:我还在学习iOS编程,所以我对这一切都很陌生。

2 个答案:

答案 0 :(得分:5)

你的朋友误以为dispatch_async是“坏”。

但是要求另一个处理器做一些像becomeFirstResponder一样简单的事情是没有意义的!设置调度需要一些时间,几乎没有时间成为第一响应者。 更糟糕的是,如果作为第一响应者的副作用可能涉及需要在主线程上完成的事情,例如绘图。

使用dispatch_async将处理器或网络密集型任务移交给其他线程。详细阅读Grand Central Dispatch,以及一般的并发编程。它功能强大,但是像所有强大的编程结构一样,如果你不理解你正在做什么,它会带来麻烦。

你的朋友可能一直在想的只是iPhone和iPad没有像典型的Macintosh一样多的处理核心,有些只有一个核心。在这些方面,您无法同时使用多个处理器。但是仍然有很好的理由去做异步获取网页,所以它们不会中断诸如滚动或导航动画之类的事情。

答案 1 :(得分:3)

我不确定你的朋友指的是什么,但是

dispatch_async(dispatch_get_main_queue(), ^{
     [self.teamName becomeFirstResponder];
 });

dispatch_async非常强大。作为新手,您将主要使用它在与UI不同的队列中运行一些代码密集,以便UI保持响应,一旦您有值(或图像或任何需要更新的UI相关),您将最终如上所述调用主队列。

坚持事实......不要担心你的朋友。