gpt4 book ai didi

ios - dispatch_async 中的 dispatch_sync

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:54:39 25 4
gpt4 key购买 nike

我只是想确认为什么需要这样做。

我将此代码添加到 KIImagePager(一个 cocoapod)以加载应用本地的图像(默认代码从 url 加载图像)。

根据同事的建议,这是我的工作代码:

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{
dispatch_sync(dispatch_get_main_queue(), ^{
[imageView setImage:[UIImage imageNamed:[aImageUrls objectAtIndex:i]]];;
});
});

我注意到,如果我取出内部 dispatch_sync,它会起作用,但不是我想要的方式(当我开始滚动时,图像寻呼机 ScrollView 上的一些图像还没有加载)。但它们最终会加载。

我的问题是,主队列上的同步调用是否将图像返回到 UI(位于主队列上)?因为它确实可以在删除第二个异步的情况下工作。

最佳答案

内部调度在主线程上执行它的代码块。这是必需的,因为所有 UI 操作都必须在主线程上执行。你的图像下载代码(执行此代码段的上下文)可能在后台线程上。

外部调度在后台线程上执行它的 block 。它给出的 block 是在主线程上执行的 block 。因此,可以安全地移除外部 block 。

Hrs 概述了您正在使用的成语。

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{
// do blocking work here outside the main thread.
// ...
// call back with result to update UI on main thread
//
// what is dispatch_sync? Sync will cause the calling thread to wait
// until the bloc is executed. It is not usually needed unless the background
// background thread wants to wait for a side effect from the main thread block
dispatch_sync(dispatch_get_main_queue(), ^{
// always update UI on main thread
});
});

关于ios - dispatch_async 中的 dispatch_sync,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17002912/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com