我在开发中的 iPhone 应用程序时遇到了一个非常奇怪的崩溃。似乎每次我向朋友展示我的应用程序时它都会崩溃,但否则它永远不会崩溃。在对墨菲定律方面普遍感到困惑之后,我确定了撞车的模式——纽约市地铁。使用地铁后,我的应用程序经常崩溃。我已经将问题追溯到我使用Reachability
. 该应用程序在无网络情况下(不包括飞行模式)使用后下次崩溃。在执行任何其他网络操作之前,我会遵循 Apple 的指南并检查是否存在连接Reachability
,但我发现了一些关于如何调用它的相互冲突的文档。
目前我正在做这样的事情:
-(BOOL)reachable {
Reachability *r = [Reachability reachabilityWithHostName:@"www.stackoverflow.com"];
NetworkStatus internetStatus = [r currentReachabilityStatus];
if(internetStatus == NotReachable) {
return NO;
}
return YES;
}
我正在使用从 viewDidAppear 调用的方法同步调用它。
if ([self reachable]== YES) {
... do network stuff ...
我的问题:是否正确使用Reachability
它可以解决这个错误并处理没有 3G 或 Wifi 网络的情况?我是否需要生成另一个线程或做一些事情来删除同步调用?
顺便说一下,这里是我的应用程序崩溃时看到的崩溃日志,这让我认为这是一个同步/异步问题。
应用特定信息: (应用名称)未能及时恢复 已用总 CPU 时间(秒):3.280(用户 1.770,系统 1.510),33% CPU 已用应用程序 CPU 时间(秒):0.040,0% CPU 线程 0 名称:调度队列:com.apple.main-thread 线程 0: 0 libsystem_kernel.dylib 0x30747fbc kevent + 24 1 libsystem_info.dylib 0x30abec4e _mdns_search + 586 2 libsystem_info.dylib 0x30abfb72 mdns_addrinfo + 370 3 libsystem_info.dylib 0x30abfd68 search_addrinfo + 76 4 libsystem_info.dylib 0x30ac1bcc si_addrinfo + 1080 5 libsystem_info.dylib 0x30abd0b2 getaddrinfo + 78 6 系统配置 0x311b4256 __SCNetworkReachabilityGetFlags + 962 7 系统配置 0x311b4f1e SCNetworkReachabilityGetFlags + 98