gpt4 book ai didi

iphone - 为什么 Reachability 示例应用程序会在此处停止?

转载 作者:太空狗 更新时间:2023-10-30 03:51:42 27 4
gpt4 key购买 nike

Apple 名为 Reachability 的示例应用展示了如何检测连接。如果您只有 wifi 而没有互联网,该应用会在下面的第二行停顿一分钟以上:

SCNetworkReachabilityFlags reachabilityFlags;
BOOL gotFlags = SCNetworkReachabilityGetFlags(reachabilityRef, &reachabilityFlags);

SCNetworkReachabilityGetFlags 来自 SystemConfiguration.framework。关于如何解决这个问题有什么建议吗?

最佳答案

要直接回答您的问题,不,似乎没有任何方法可以“绕过” SCNetworkReachabilityGetFlags() 在您描述的特定情况下需要很长时间才能返回(例如,通过 WiFi 连接检查远程主机可达性到没有互联网的路由器)。几个选项:

选项 1. 在单独的线程中进行调用,以便您的应用程序的其余部分可以继续运行。例如修改ReachabilityAppDelegate.m如下:

// Modified version of existing "updateStatus" method
- (void)updateStatus
{
// Query the SystemConfiguration framework for the state of the device's network connections.
//self.remoteHostStatus = [[Reachability sharedReachability] remoteHostStatus];
self.remoteHostStatus = -1;
self.internetConnectionStatus = [[Reachability sharedReachability] internetConnectionStatus];
self.localWiFiConnectionStatus = [[Reachability sharedReachability] localWiFiConnectionStatus];
[tableView reloadData];

// Check remote host status in a separate thread so that the UI won't hang
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
NSTimer *timer = [NSTimer timerWithTimeInterval:0 target:self selector:@selector(updateRemoteHostStatus) userInfo:nil repeats:NO];
[[NSRunLoop currentRunLoop] addTimer:timer forMode:NSDefaultRunLoopMode];
[pool release];
}
// New method
- (void) updateRemoteHostStatus
{
self.remoteHostStatus = [[Reachability sharedReachability] remoteHostStatus];
[tableView reloadData];
}

选项 2. 在尝试连接到远程主机时使用使用超时值的不同 API/函数。这样,您的应用程序在放弃之前只会挂起 X 秒。

其他一些注意事项:

  • 您询问的对 SCNetworkReachabilityGetFlags() 的特定调用(即 Reachability.m 中的第 ~399 行)试图查看 www.apple.com 是否“可达”以推断“外部互联网”是否可用一般而言“可达”。
  • 在 Apple 的系统配置框架中,“可达”可能并不意味着您认为的那样。根据官方文档,“可达”似乎意味着,理论上,如果您愿意,您的计算机可以连接到主机 X,但它可能需要先实际建立连接(例如,先拨调制解调器)。换句话说,SCNetworkReachabilityGetFlags() 实际上并没有建立连接。

关于iphone - 为什么 Reachability 示例应用程序会在此处停止?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/723463/

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