我有一個XML解析器,當它開始它使整個應用程序凍結,直到它完成,我打電話使用的解析器:XML解析器阻止主線程
xmlParser = [[XMLParser alloc] loadXMLByURL:@"http://abdelelrafa.com/test2.xml"];
什麼是擁有最好的辦法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元素或回調完成/失敗