dispatch_async(dispatch_get_main_queue(), ^{
[self.teamName becomeFirstResponder];
});
我和一位朋友聊天,他告诉我他听说使用dispatch_async不是很好,但他不确定原因。
我在Google上查了一下,但没有找到任何理由说明此代码错误
如何改进此代码?有更好的方法吗?
注意:我还在学习iOS编程,所以我对这一切都很陌生。
答案 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相关),您将最终如上所述调用主队列。
坚持事实......不要担心你的朋友。