iOS中的dispatch_async和阻止

Tun*_*her 33 ios dispatch-async

这段代码意味着什么?

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];
    });
Run Code Online (Sandbox Code Playgroud)

请简要解释一下.谢谢

Mar*_*tel 101

中的一段代码

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

});
Run Code Online (Sandbox Code Playgroud)

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

如果您想了解更多信息,请阅读Apple在Grand Central Dispatch上的文档


Md *_*ais 6

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

Objective-C的:

dispatch_async(dispatch_get_main_queue(), ^{

});
Run Code Online (Sandbox Code Playgroud)

应始终从主队列执行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")
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 稍微澄清一下:"有时即使后台线程也无法更新UI,你必须强制主线程将代码执行到主队列中"这是不对的,UI更新必须始终在主要执行线程,这根本不是可选的. (2认同)