dispatch_async(dispatch_get_main_queue(), ^{
[self.teamName becomeFirstResponder];
});
我和一个 friend 聊天,他告诉我他听说使用 dispatch_async 不是很好,但他不确定为什么。
我在谷歌上查了下,没有发现这段代码错误的原因
我如何改进这段代码?有没有更好的方法来做到这一点?
注意:我还在学习 iOS 编程,所以我对这整件事都是陌生的。
最佳答案
您的 friend 错误地认为 dispatch_async 是“坏的”。
但是要求另一个处理器做像 becomeFirstResponder 这样简单的事情是没有意义的!设置调度需要一些时间,而成为第一响应者几乎不需要时间。 更糟糕的是,如果作为第一响应者的副作用可能涉及需要在主线程上完成的事情,例如绘图。
罢工>
使用 dispatch_async 将处理器或网络密集型任务转移到其他线程。具体阅读 Grand Central Dispatch,以及一般的并发编程。它功能强大,但与所有功能强大的编程结构一样,如果您不理解自己在做什么,它可能会造成麻烦。
您的 friend 可能一直在想的是,iPhone 和 iPad 的处理核心数量不如典型的 Macintosh,有些只有一个核心。在这些上,您不会获得同时使用多个处理器的好处。但是仍然有充分的理由做异步获取网页之类的事情,因此它们不会中断滚动或导航动画之类的事情。
关于ios - 为什么 dispatch_async 不好?完成相同任务的更好方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14887909/