XML解析器阻止主线程
问题描述:
我有一个XML解析器,当它开始它使整个应用程序冻结,直到它完成,我打电话使用的解析器:XML解析器阻止主线程
xmlParser = [[XMLParser alloc] loadXMLByURL:@"http://abdelelrafa.com/test2.xml"];
什么是拥有最好的办法XML解析器在不中断主线程的情况下工作? 我想知道如果使用其他线程是最好的选择,或使用别的东西。
答
如果你打算使用initWithContentsOfURL
,那么你绝对应该从主线程开始工作,然后在获得初始化结果后再回到主线程。
根据您的文档的大小,你会发现它更好地使用NSURLConnection
,该做的工作,而不会阻塞主线程,然后调用[XMLParser initWithData]
一旦你的数据首先获取URL的内容NSData
。这具有额外的好处,您可以实际处理与XML错误分开的网络错误。
答
尝试使用GCD为你做这个操作:
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
xmlParser = [[XMLParser alloc] loadXMLByURL:@"http://abdelelrafa.com/test2.xml"];
dispatch_async(dispatch_get_main_queue(), ^{
// Update UI
});
});
上一个新的输入队列dispatch_async
,在这一块做的所有旅游网络操作,那么/ XML解析创建另一个dispatch_async
此时主队列所以你可以更新UI元素或回调完成/失败