在我的应用程序委托中applicationDidBecomeActive:
,我检查用户登录状态的有效性,如果失败则抛出一个登录页面。此检查涉及网络调用,我担心在网络不佳的情况下它可能会阻塞主 UI,从而有效地使应用程序挂起。
当应用程序变得活跃时,从时间的角度会发生什么?阻塞/运行的内容是否applicationDidBecomeActive:
在主线程上?我应该异步进行这个网络调用(例如使用 GCD)吗?
在我的应用程序委托中applicationDidBecomeActive:
,我检查用户登录状态的有效性,如果失败则抛出一个登录页面。此检查涉及网络调用,我担心在网络不佳的情况下它可能会阻塞主 UI,从而有效地使应用程序挂起。
当应用程序变得活跃时,从时间的角度会发生什么?阻塞/运行的内容是否applicationDidBecomeActive:
在主线程上?我应该异步进行这个网络调用(例如使用 GCD)吗?
该applicationDidBecomeActive
方法像所有 UIKit 方法一样在主线程上调用。您必须始终确保在后台线程中执行任何长时间运行的进程或网络访问。
使用异步形式NSURLConnection
或使用 GCD 对后台队列执行操作。
您不应该在任何应用程序委托applicationDid...
方法中执行同步网络操作(好吧,您不应该在程序中的任何地方执行同步网络操作)。事实上,如果响应启动/后台/恢复事件需要很长时间,iOS 将终止您的应用程序。崩溃日志将说明<Your app> failed to launch in time
.