可达性代码阻塞主线程

时间:2011-09-26 01:34:26

标签: iphone ios multithreading reachability

我正在开发一款需要我检查可达性的应用。

由于这个原因,我开始查找内容并找到了DDG和Apple的代码。我决定使用Apple最新的可访问性代码。

我导入了这个,并且按照Apple的样本中的建议,我提出了以下注册方式:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(notificationHandler:) name:kReachabilityChangedNotification object:nil];

    //check for local connection and start notifier
    client = [[Reachability reachabilityForInternetConnection] retain];
    [client startNotifier];

    //check for server connection and start notifier
    server = [[Reachability reachabilityWithHostName:SERVER_HOST_NAME] retain];
    [server startNotifier];

    //check for other server and start notifier
    otherServer = [[Reachability reachabilityWithHostName:OTHER_SERVER_HOST_NAME] retain];
    [otherServer startNotifier];

我在运行应用程序时观察到的是,此代码开始阻止UI(阻止主线程)。在主机名解析之前,我无法与其他UI元素交互。现在我知道Apple已经提出了关于DNS解析的警告并使其异步。

我的问题是,如何继续使其异步?

我是否会生成另一个线程并保持其运行,以便不“释放”Reachability对象?

提前感谢您的帮助! :)

1 个答案:

答案 0 :(得分:4)

好。好吧,我发现了问题所在。 > _<

上面发布的代码确实异步工作。

但是,我在notificationHandler:下编写的代码正在对服务进行同步调用。它是由其他人编写的,因为我花了一些时间才弄清楚这是UI冻结的来源。但问题已经解决了。我以为我会写这篇文章,以便关闭这个问题。 :)

再次感谢!