0

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

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

Parser 对象符合 NSXMLParserDelegate 协议,即。它处理来自 Parser 拥有的 NSXMLParser 的回调。

4

1 回答 1

1

使用 GCD 在后台线程上启动 XML Parser

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);
    });
}
于 2012-05-23T18:52:30.287 回答