ios - 延迟显示异步获取的项目

标签 ios asynchronous uiview swift grand-central-dispatch

我正在从不同的来源异步使用 block 获取项目,例如......

  • EKEvents 提醒
  • 使用 NSURLSession 的远程 JSON 提要
  • ...我也在以经典的同步方式获取 EKEvents 日历事件

每个源的数据获取完成后,我发布通知并立即将相应的项目添加为 subview 。

问题:项目/ View 仅在几秒钟的延迟后显示,有时甚至更长(在获得实际结果响应很久之后)。对于日历事件等同步获取的项目,情况并非如此——它们会立即显示。

(奇怪的是,使用新的 Xcode6 实时 View 调试器,我可以在那里看到新的项目 View ,但在实际的模拟器或设备中看不到。)

这可能与主队列中未发生的异步提取有关吗? 有没有办法改变这种异步行为,让所有结果立即显示为生成的 View ?

最佳答案

当您发布通知时,您是将其分派(dispatch)到主队列吗?如果不是,您的处理程序是否将 UI 更新分派(dispatch)到主队列?

当您从后台线程发布通知时,将在后台线程上调用处理程序。因此,如果您尝试执行 UI 更新以响应从后台线程发送的通知而不将 UI 更新分派(dispatch)回主队列,您将看到您描述的那种行为。

关于ios - 延迟显示异步获取的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25318566/

相关文章:

ios - Firebase iOS - 类型 'LoginViewController' 不符合协议(protocol) 'FUIAuthDelegate'

javascript - 使用 IO 操作时如何不让任务过度饱和 libuv

uitableview - 在UITableView中禁用触摸交互

ios - UITableView:向上滑动时收缩标签栏和导航栏

ios - Xcode 11 beta 5 中没有 iOS 13 模拟器

iOS Swift 3 POST 问题

javascript - 为什么对 IDBObjectStore.get() 的调用会导致混淆行为?

javascript - Node : res. 下载下载空压缩文件夹

ios - 将 subview 定位在圆形 View 的边缘

ios - 当 UIImages 碰撞时添加到 int