我正在从不同的来源异步使用 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/