33

这段代码是什么意思?

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        TMBaseParser *parser=[[TMBaseParser alloc] init];
        parser.delegate=self;
        NSString *post =nil;
        NSData *postData = [post dataUsingEncoding:NSUTF8StringEncoding];
        [parser parseForServiceType:TMServiceCategories postdata:postData];
    });

请简要解释一下。

4

3 回答 3

105

中的一段代码

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

});

在后台线程上异步运行。这样做是因为解析数据可能是一项耗时的任务,并且它可能会阻塞主线程,这将停止所有动画并且应用程序不会响应。

如果您想了解更多信息,请阅读 Apple 关于Grand Central DispatchDispatch Queue的文档。

于 2013-05-16T14:16:49.747 回答
7

如果上面的代码片段不起作用,那么试试这个:

目标-C:

dispatch_async(dispatch_get_main_queue(), ^{

});

UI 更新应始终从主队列执行。“^”符号表示块的开始。

斯威夫特 3:

DispatchQueue.global(qos: .background).async {
    print("This is run on the background queue")

    DispatchQueue.main.async {
        print("This is run on the main queue, after the previous code in outer block")
    }
}
于 2016-07-28T15:04:07.280 回答
2

那是一个大中央调度区。

  1. dispatch_async 是在另一个队列上运行的调用。
  2. dispatch_get_global_queue 是获取具有所需特征的特定队列的调用。例如,代码可以在 DISPATCH_QUEUE_PRIORITY_BACKGORUND 上以低优先级运行。
  3. 在块内,代码什么也不做。帖子设置为零。然后将一条消息发送到 nil“dataUsingEncoding”。Objective C 将所有调用都设为 nil。 最后,解析器发送“nil”postData。
  4. 充其量,这将无济于事。在最坏的情况下,发送解析器 nil 数据会崩溃。
于 2014-10-28T07:23:30.883 回答