IOS/Objective-C:检查 Internet 连接的最快方法 - 2017
IOS/Objective-C: Fastest way to check for Internet connection - 2017
我昨天在飞机上发现的用于检查 Internet 连接的代码非常慢。我在许多较旧的 SO answers 中使用该技术来检查 NSUURL,但是,当在没有连接的飞机上时,它实际上需要十五秒或更长时间才能 return FALSE 使应用程序基本上无法使用。
是否有可靠的异步方法可以做到这一点?人们在较早的答案中推荐 Tony Million 的可达性 class,但它看起来非常复杂,Apple 显然拒绝了某些应用程序 using it。如果有人能建议在 2017 年检查互联网连接的最快、可靠的方法,将不胜感激。谢谢。
- (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;
}
}
可达性是正确的方法...即使在 2017 年也是如此。
所有各种 Reachability classes 均基于 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 class 而不是 Tony Million 的,请将 [reach isReachable]
替换为 [reach currentReachabilityStatus] != NotReachable
。
不用担心 Apple 可能会拒绝使用它的应用程序。如果您遇到这种情况,只需将 class 从 Reachability 重命名为 MyReachability。
我昨天在飞机上发现的用于检查 Internet 连接的代码非常慢。我在许多较旧的 SO answers 中使用该技术来检查 NSUURL,但是,当在没有连接的飞机上时,它实际上需要十五秒或更长时间才能 return FALSE 使应用程序基本上无法使用。
是否有可靠的异步方法可以做到这一点?人们在较早的答案中推荐 Tony Million 的可达性 class,但它看起来非常复杂,Apple 显然拒绝了某些应用程序 using it。如果有人能建议在 2017 年检查互联网连接的最快、可靠的方法,将不胜感激。谢谢。
- (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;
}
}
可达性是正确的方法...即使在 2017 年也是如此。
所有各种 Reachability classes 均基于 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 class 而不是 Tony Million 的,请将 [reach isReachable]
替换为 [reach currentReachabilityStatus] != NotReachable
。
不用担心 Apple 可能会拒绝使用它的应用程序。如果您遇到这种情况,只需将 class 从 Reachability 重命名为 MyReachability。