延迟显示异步获取的项目
Posted
技术标签:
【中文标题】延迟显示异步获取的项目【英文标题】:Delay displaying async fetched items 【发布时间】:2014-08-14 22:28:43 【问题描述】:我正在使用块异步从不同来源(例如……)获取项目
EKEvents 提醒 使用 NSURLSession 远程 JSON 提要 …我也在以经典的同步方式获取 EKEvents 日历事件。每个来源的数据提取完成后,我发布通知并立即将相应的项目添加为子视图。
问题:项目/视图仅在延迟几秒钟后才会显示,有时甚至更长(在获得实际结果响应之后很长时间)。对于日历事件等同步获取的项目,情况并非如此——它们会立即显示。
(奇怪的是使用新的 Xcode6 实时视图调试器,我可以在那里看到新的项目视图,但在实际的模拟器或设备中看不到。)
这可能与主队列上未发生异步获取有关吗? 有没有办法改变这种异步行为,让所有结果立即显示为生成的视图?
【问题讨论】:
添加子视图的地方用主线程试一次。 【参考方案1】:当您发布通知时,您是否将其分派到主队列?如果没有,您的处理程序是否将 UI 更新分派到主队列?
当您从后台线程发布通知时,处理程序会在后台线程上调用。因此,如果您尝试执行 UI 更新以响应从后台线程发送的通知,而不将 UI 更新分派回主队列,您将看到您描述的那种行为。
【讨论】:
完美。是的,这就是问题所在!我没有将通知发送回主队列。 :)以上是关于延迟显示异步获取的项目的主要内容,如果未能解决你的问题,请参考以下文章
最近项目中遇到了一个场景,其实很常见,就是定时获取接口刷新数据。那么问题来了,假设我设置的定时时间为1s,而数据接口返回大于1s,应该用同步阻塞还是异步?