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元素或回调完成/失败