2012-05-23 43 views
0

我对线程很陌生。这是我的问题。我有一个自定义的解析器类,它使用NSXMLParser,也做一些其他小事情。它解析来自网络的XML并创建一个值的字典。 我还有一个DataProcesor帮助程序类,它处理从Parser传递给它的数据(NSDictionary),并在托管上下文中从它创建真正的CoreData对象。解析B线程,但值主线程?

现在我想将我的解析器移动到后台线程。 我该怎么做? (NSthread,NSOperation,GCD ...)? 解析器应该如何将这些NSDictionaries返回到主线程中的数据处理器?

解析器对象符合NSXMLParserDelegate协议即。它处理Parser拥有的NSXMLParser的回调。

回答

1

使用GCD启动XML解析器在后台线程

dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); 
dispatch_async(queue, ^{ 
    //call your xml parser 
    //pass yourself in as it's delegate 
}); 

当您在回调收到的NSDictionary,更新任何UI元素

-(void)myCallBack:(NSDictionary*)newData { 
    dispatch_async(dispatch_get_main_queue(), ^{ 
     //execute on main queue 
     ProcessDictionaryData(newData); 
    }); 
} 
前跳回到主队列