applicationDidBecomeActive:阻塞主线程吗?

时间:2013-03-10 22:36:40

标签: ios multithreading cocoa-touch uiapplicationdelegate

在我的app delegate applicationDidBecomeActive:中,我检查用户登录状态的有效性,如果失败则抛出登录页面。此检查涉及网络呼叫,我担心在网络状况不佳时,它可能会阻止主UI,从而有效地使应用程序挂起。

当应用程序变为活动状态时,从时间角度看会发生什么? applicationDidBecomeActive:的内容是否在主线程上阻止/运行?我应该异步进行此网络调用(例如使用GCD)吗?

2 个答案:

答案 0 :(得分:8)

在主线程上调用applicationDidBecomeActive方法,就像所有UIKit方法一样。您必须始终确保在后台线程中执行任何长时间运行的进程或网络访问。

使用NSURLConnection的异步形式或使用GCD在后台队列上执行操作。

答案 1 :(得分:2)

您不应该在任何应用程序委托applicationDid...方法中执行同步网络操作(嗯,您不应该在程序中的任何位置执行同步网络操作)。实际上,如果需要很长时间才能响应启动/后台/恢复事件,iOS将终止您的应用。崩溃日志将声明<Your app> failed to launch in time