gpt4 book ai didi

iphone - Reachability 在无网络情况后导致崩溃——如何正确使用异步 Reachability

转载 作者:行者123 更新时间:2023-12-03 18:39:50 28 4
gpt4 key购买 nike

我在开发 iPhone 应用程序时遇到了一次非常奇怪的崩溃。似乎每次我向 friend 展示我的应用程序时它都会崩溃,但否则它永远不会崩溃。在对墨菲定律感到困惑之后,我确定了事故的模式——纽约地铁。使用地铁后,我的应用程序不断崩溃。我已将问题追溯到我对 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 Guide for iOS 4 中的代码

我的问题:是否可以正确使用 Reachability 来处理此错误并处理 3G 或 Wifi 网络缺失的情况?我是否需要生成另一个线程或执行某些操作来删除同步调用?

顺便说一下,这是我在应用程序崩溃时看到的崩溃日志,这让我认为这是一个同步/异步问题。

Application Specific Information:(app name) failed to resume in timeElapsed total CPU time (seconds): 3.280 (user 1.770, system 1.510), 33% CPU Elapsed application CPU time (seconds): 0.040, 0% CPUThread 0 name:  Dispatch queue: com.apple.main-threadThread 0:0   libsystem_kernel.dylib          0x30747fbc kevent + 241   libsystem_info.dylib            0x30abec4e _mdns_search + 5862   libsystem_info.dylib            0x30abfb72 mdns_addrinfo + 3703   libsystem_info.dylib            0x30abfd68 search_addrinfo + 764   libsystem_info.dylib            0x30ac1bcc si_addrinfo + 10805   libsystem_info.dylib            0x30abd0b2 getaddrinfo + 786   SystemConfiguration             0x311b4256 __SCNetworkReachabilityGetFlags + 9627   SystemConfiguration             0x311b4f1e SCNetworkReachabilityGetFlags + 98

最佳答案

在同步情况下,您可能会被 iOS 应用程序看门狗杀死。这是因为要进行可达性检查,SCNetworkReachability 功能需要进行 DNS 查找,这可能需要长达 30 秒的时间。如果检查主线程(即在 viewDidAppear 中)的可达性,您可能会阻塞主线程很长时间,iOS 会认为您的应用程序已挂起,并且应用程序看门狗会在 20 秒后将其杀死。

Apple 甚至在 Reacahbility 示例代码中对此发出警告:

Apple Reachability Sample Code README

只需像在 Reachability 示例应用程序中那样使用通知即可 - 一旦您掌握了 NSNotificationCenter 设计模式,它就会运行良好并且非常简单。

祝你好运!

关于iphone - Reachability 在无网络情况后导致崩溃——如何正确使用异步 Reachability,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5900181/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com