主线程阻塞导致应用程序在 iOS 8 中崩溃
main thread blockage is causing app to crash in iOS 8
我的应用程序在启动时崩溃,因为异常 'failed to scene-update in time'
这是因为可达性没有return准时
这是堆栈跟踪
com.tjango.Plus3未能及时更新场景
已用总 CPU 时间(秒):2.590(用户 2.590,系统 0.000),12% CPU
已用应用 CPU 时间(秒):0.302,1% CPU
线程 0 名称:调度队列:com.apple.main-thread
线程 0:
_semaphore_wait_trap + 8
__dispatch_semaphore_wait_slow + 252
_xpc_connection_send_message_with_reply_sync + 184
___SCNetworkReachabilityServer_targetStatus + 192
___SCNetworkReachabilityGetFlags + 440
_SCNetworkReachabilityGetFlags + 232
-[可达性currentReachabilityStatus] Reachability.m:295
这只发生在 iOS 8。
卡住的函数是Apple的Reachability库:
我不明白为什么这个函数会阻止它。
- (NetworkStatus)currentReachabilityStatus
{
NSAssert(_reachabilityRef != NULL, @"currentNetworkStatus called with NULL SCNetworkReachabilityRef");
网络状态 returnValue = NotReachable;
SCNetworkReachabilityFlags 标志;
如果 (SCNetworkReachabilityGetFlags(_reachabilityRef, &flags))
{
如果(_alwaysReturnLocalWiFiStatus)
{
return价值=[自我localWiFiStatusForFlags:flags];
}
别的
{
return值=[自我networkStatusForFlags:flags];
}
}
return return值;
}
Reachability 可能是 iOS 上使用最不正确的库。这些规则有帮助:
- Reachability 不应在主线程上调用。在辅助线程上调用它并让该线程将网络更改通知主线程。
- 尝试连接前不要检查网络状态 - 只需尝试连接并根据需要处理错误。有时网络会离线以节省电量,直到有人尝试连接。
- 可达性主要用于检测网络在离线后何时恢复在线。您可以在此时重试失败的连接。
看我的评论:iOS Reachability fails to catch the case where connected to WiFi but not logged in
我的应用程序在启动时崩溃,因为异常 'failed to scene-update in time'
这是因为可达性没有return准时 这是堆栈跟踪
com.tjango.Plus3未能及时更新场景 已用总 CPU 时间(秒):2.590(用户 2.590,系统 0.000),12% CPU 已用应用 CPU 时间(秒):0.302,1% CPU 线程 0 名称:调度队列:com.apple.main-thread 线程 0: _semaphore_wait_trap + 8 __dispatch_semaphore_wait_slow + 252 _xpc_connection_send_message_with_reply_sync + 184 ___SCNetworkReachabilityServer_targetStatus + 192 ___SCNetworkReachabilityGetFlags + 440 _SCNetworkReachabilityGetFlags + 232 -[可达性currentReachabilityStatus] Reachability.m:295
这只发生在 iOS 8。
卡住的函数是Apple的Reachability库: 我不明白为什么这个函数会阻止它。
- (NetworkStatus)currentReachabilityStatus { NSAssert(_reachabilityRef != NULL, @"currentNetworkStatus called with NULL SCNetworkReachabilityRef"); 网络状态 returnValue = NotReachable; SCNetworkReachabilityFlags 标志; 如果 (SCNetworkReachabilityGetFlags(_reachabilityRef, &flags)) { 如果(_alwaysReturnLocalWiFiStatus) { return价值=[自我localWiFiStatusForFlags:flags]; } 别的 { return值=[自我networkStatusForFlags:flags]; } } return return值; }
Reachability 可能是 iOS 上使用最不正确的库。这些规则有帮助:
- Reachability 不应在主线程上调用。在辅助线程上调用它并让该线程将网络更改通知主线程。
- 尝试连接前不要检查网络状态 - 只需尝试连接并根据需要处理错误。有时网络会离线以节省电量,直到有人尝试连接。
- 可达性主要用于检测网络在离线后何时恢复在线。您可以在此时重试失败的连接。
看我的评论:iOS Reachability fails to catch the case where connected to WiFi but not logged in