如何同步检查互联网连接?

时间:2014-07-02 16:00:04

标签: ios connection afnetworking reachability

如何同步检查网络?我希望网络检查阻止调用线程并返回正确的结果

我尝试了tonymillion's ReachabilityAFNetworkReachabilityManager,但他们都使用回调阻止。这意味着在回调之前,可达性状态是未知的。

我想在applicationDidFinishLaunchingWithOptions:检查网络,但此时,可达性为AFNetworkReachabilityStatusUnknown(AFNetworkReachabilityManager)或不可靠(tonymillion的可达性)

我看到唯一的方法是针对某些主机(例如google.com)执行NSURLConnection,例如Check for internet connection - iOS SDK

还有更好的方法吗?

1 个答案:

答案 0 :(得分:1)

回答我自己的问题:这是可靠的

阅读此Technical Q&A QA1693 Synchronous Networking On The Main Thread

  

可达性 - 系统配置框架可达性API   ()以同步运行   默认情况下。因此,看似无害的例程就像   SCNetworkReachabilityGetFlags可以让你被看门狗杀死。如果   如果您正在使用可访问性API,则应该异步使用它。   这涉及使用SCNetworkReachabilityScheduleWithRunLoop   例程,在运行循环上安排可达性查询

所以我们可以像iOS: Check whether internet connection is available

一样使用它
- (BOOL) isConnectionAvailable
{
    SCNetworkReachabilityFlags flags;
        BOOL receivedFlags;

        SCNetworkReachabilityRef reachability = SCNetworkReachabilityCreateWithName(CFAllocatorGetDefault(), [@"dipinkrishna.com" UTF8String]);
        receivedFlags = SCNetworkReachabilityGetFlags(reachability, &flags);
        CFRelease(reachability);

        if (!receivedFlags || (flags == 0) )
        {
            return FALSE;
        } else {
        return TRUE;
    }
}