IOS / Objective-C:检查互联网连接的最快方法 - 2017 [重复]

Posted

技术标签:

【中文标题】IOS / Objective-C:检查互联网连接的最快方法 - 2017 [重复]【英文标题】:IOS/Objective-C: Fastest way to check for Internet connection - 2017 [duplicate] 【发布时间】:2017-07-19 14:17:33 【问题描述】:

我昨天在飞机上发现的用于检查 Internet 连接的代码非常慢。我在许多旧的SO answers 中使用检查 NSUURL 的技术,但是,在没有连接的飞机上,实际上需要 15 秒或更长时间才能返回 FALSE,这使得应用程序基本上无法使用。

是否有可靠的异步方法可以做到这一点?人们在较旧的答案中推荐 Tony Million 的可达性类,但它似乎非常复杂,Apple 显然拒绝了一些应用程序using it。如果有人能建议在 2017 年检查 Internet 连接的最快、可靠的方法,将不胜感激。谢谢。

- (BOOL)connected
    
        NSURL *scriptUrl = [NSURL URLWithString:@"https://www.google.com"];
        NSData *data = [NSData dataWithContentsOfURL:scriptUrl];
        if (data) 
            NSLog(@"Device is connected to the internet");
            return TRUE;
        
        else 
            NSLog(@"Device is not connected to the internet");
            return FALSE;
        
    

【问题讨论】:

尊重为您的测试环境租用私人飞机。对此投赞成票。 这是苹果自己的示例代码。 developer.apple.com/library/content/samplecode/Reachability/… 如何改进 Xcode IDE;) Apple 的代码似乎非常复杂,无法检查连接性。他们建议你在 Xcode 中构建一个单独的项目,看看它是如何工作的。这真的是最好的方法吗? 我链接到在我的问题的第二行中据说是重复的问题。我在 2017 年重新提出这个问题的原因是链接到问题中接受的答案来自 2009 年。玛丽安在下面提供了一个令人信服的更新答案。 【参考方案1】:

可达性是正确的方法......即使在 2017 年也是如此。

所有各种可达性类都基于 Apple 的示例代码。

它可能看起来很复杂,因为它使用 C API。但是用法很简单:

- (BOOL)connected

    Reachability *reach = [Reachability reachabilityForInternetConnection];

    if ([reach isReachable]) 
        NSLog(@"Device is connected to the internet");
        return TRUE;
    
    else 
        NSLog(@"Device is not connected to the internet");
        return FALSE;
    

如果您将使用 Apple 的 Reachability 类而不是 Tony Million 的,请将 [reach isReachable] 替换为 [reach currentReachabilityStatus] != NotReachable

不用担心 Apple 可能会拒绝使用它的应用。如果您遇到这种情况,只需将类从 Reachability 重命名为 MyReachability。

【讨论】:

说到Wi-Fi连接,这种方法只能判断你是否连接到路由器。它不知道该路由器是否真的连接到互联网。

以上是关于IOS / Objective-C:检查互联网连接的最快方法 - 2017 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

iOS13 立即检查互联网连接

检查是不是有互联网连接 webView 没有出现

检查互联网连接 - iOS 逻辑 [重复]

检查互联网连接 iOS - Obj-C

如何在 iOS 设备上检查互联网连接? [复制]

检查 iOS 上的互联网连接会引发错误