我正在开发一款需要我检查可达性的应用。
由于这个原因,我开始查找内容并找到了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对象?
提前感谢您的帮助! :)
答案 0 :(得分:4)
好。好吧,我发现了问题所在。 > _<
上面发布的代码确实异步工作。
但是,我在notificationHandler:
下编写的代码正在对服务进行同步调用。它是由其他人编写的,因为我花了一些时间才弄清楚这是UI冻结的来源。但问题已经解决了。我以为我会写这篇文章,以便关闭这个问题。 :)
再次感谢!