【问题标题】:Parsing on B-thread but values to main thread?在 B 线程上解析但对主线程的值?
【发布时间】:2012-05-30 07:00:40
【问题描述】:

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

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

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

【问题讨论】:

    标签: ios xml multithreading


    【解决方案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);
        });
    }
    

    【讨论】:

      猜你喜欢
      • 2011-09-06
      • 2017-11-19
      • 1970-01-01
      • 2011-01-29
      • 1970-01-01
      • 1970-01-01
      • 2015-12-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多