gpt4 book ai didi

ios - dispatch_get_main_queue 的奇怪行为

转载 作者:行者123 更新时间:2023-11-29 03:36:58 26 4
gpt4 key购买 nike

我有一个启用了分页的 UIScrollView,我想显示一些带有图像的“页面”。

我在主线程中加载第一页的图像并显示它。然后我开始在后台线程中加载其他页面图像

    dispatch_async(loadingImagesQueue, ^{
for (int i = 0; i < numberOfImages; i++) {
NSString *imagePath = [arrayWithImagePaths objectAtIndex:i];
UIImage *image = [UIImage imageWithContentsOfFile:imagePath];

dispatch_async(dispatch_get_main_queue(), ^{
NSLog(@"Posting notification\n\n");
[[NSNotificationCenter defaultCenter] postNotificationName:NOTIFICATION_NAME_IMAGE_PREPARED object:image];
});
}
});

在发布通知后进行一些方法调用,女巫会创建一个包含加载图像的新页面。

我将日志消息放入加载图像并创建新页面方法中,我希望它看起来像一条有关加载图像的消息,然后是一条有关创建新页面的消息。

但是,由于某种原因,它首先加载所有图像,然后才开始创建新页面。我可以通过我的日志消息看到它。最奇怪的是,在加载最后一个图像结束和开始创建新页面之间存在很大的延迟(大约 0.5 秒)。

谁能解释一下,这种奇怪行为的原因是什么?

最佳答案

您正在调用dispatch_async。如果您想在主队列调用 dispatch_sync(dispatch_get_main_queue(), ^{ ...) 的那一刻执行通知。并确保检查您是否已经不在主线程上在主队列上分派(dispatch)任何内容时(在这里,您非常安全,但这通常是一个很好的做法,否则您可能会遇到锁)。

所以完整的代码是

if([NSThread isMainThread] == NO){
dispatch_sync(dispatch_get_main_queue(), {...
.

关于ios - dispatch_get_main_queue 的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19047886/

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