可达性代码阻塞主线程

4

我目前正在开发一款应用程序,需要检查可达性。

因此,我开始查找相关资料并找到了DDG和苹果公司的代码。我决定使用苹果最新的可达性代码。

我导入了这个代码,并按照苹果公司示例中的建议,采用以下方式进行注册:

[[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元素交互。现在我知道苹果已经警告关于DNS解析并使其异步化。
我的问题是,我该如何继续进行异步操作?
我是否需要生成另一个线程并保持其运行状态,以便不“释放”Reachability对象?
感谢您的帮助! :)
1个回答

4

好的。嗯,我找到了问题所在。>_<

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

然而,在notificationHandler:下编写的代码正在对服务进行同步调用。由于它是由其他人编写的,因此花费了我一些时间才发现这是UI冻结的源头。不过,问题已经解决。我想写这篇文章是为了给这个问题一个结束。:)

再次感谢!


请问您能告诉我解决方案是什么吗? - Maulik Kundaliya

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接