0

在这里,我有一个非常有趣的话题可供讨论,或者您可以说我需要一个更好的方法的建议。

这是我的代码

+ (BOOL) isConnected
{
     BOOL flag = TRUE;
     if (![self isHostReachable])
     {
           flag = FALSE;
           NSString* alertTitle= @"";
           NSString* alertMessage= @"";

           if (![self isInternetReachable])
           {
                 alertTitle = @"Network unavailable";
                 alertMessage = @"We can't connect to the Internet. Check your            settings/connection.";
           }
           else
           {
                 alertTitle = @"Server not responding";
                 alertMessage = @"Server not responding at the moment. Please try again later. Sorry for inconvenience";
           }
           UIAlertView *alert=[[UIAlertView alloc] initWithTitle:alertTitle
                                                  message:alertMessage
                                                 delegate:self
                                        cancelButtonTitle:@"Close"
                                        otherButtonTitles:nil];

           [alert show];
     }
     return flag;
}

+ (BOOL) isInternetReachable
{
     Reachability *netReachability = [Reachability reachabilityForInternetConnection];
     NetworkStatus netSat = [netReachability currentReachabilityStatus];
     return (!(netSat == NotReachable));
}

+ (BOOL) isHostReachable
{
     Reachability *hostReachability = [Reachability reachabilityWithHostname:   [Connection returnHostName]];
     NetworkStatus netSat = [hostReachability currentReachabilityStatus];
     return (!(netSat == NotReachable));
}

在我的代码中,我曾经调用“isConnected”方法来检查连接状态,然后再向我的服务器询问数据。

在方法中,我首先检查了hostReachability。我这样做的想法是节省计算时间。

  • 如果 hostReachability 返回 true,则表示 netConnectivity 也存在(无需验证)。所以在这里我们只完成了一次计算。
  • 如果 hostReachability 返回 false,那么我正在检查它是负责它的网络连接。因此进行了两次计算。

但是通常看到代码先验证netConnectivity,如果没问题,再验证hostReachability。

所以大多数时候两次计算,这与我完成工作的方式形成鲜明对比。

请建议您认为哪种方法更好?

4

1 回答 1

1

好吧,netConnectivity 将验证网络是否就位并且没有由于 100 个原因中的任何一个而关闭,然后验证主机是可访问的,因为服务器可能由于某些问题而关闭。

如果网络被验证为连接失败,它将首先排除验证主机。反之亦然不是真的。我希望这对你有用。干杯!!

于 2012-09-21T07:40:29.123 回答