ios - 为什么 dispatch_async 不好?完成相同任务的更好方法是什么?

标签 ios objective-c

     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/

相关文章:

ios - 在另一个 collectionview 的 header 中实现 collectionview 时出错

ios - 仅按标准距离垂直/水平滑动

ios - 使用 NSMutableArray 中的 BOOL 对象来确定单元格状态

objective-c - 尝试检索字符串值时发送到实例的无法识别的选择器

ios - UICollectionView 在屏幕加载时自动滚动到底部

ios - 如何在 objective-c 中的sqlite数据库中存储和检索NSArray对象

ios - 调试 iPhone Chrome

ios - UICollectionView 中的长按和平移手势

ios - Firebase-数据库结构效率与平坦度

ios - 如何找出为什么函数在 iOS 中被弃用?