0

我有一个启用分页的 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 秒)。

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

4

1 回答 1

1

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

所以完整的代码是

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

于 2013-09-27T12:21:50.073 回答