我有一个启用了分页的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秒)。
任何人都可以解释,这种奇怪行为的原因是什么?
答案 0 :(得分:1)
您正在调用dispatch_async。如果要在主队列调用dispatch_sync(dispatch_get_main_queue(), ^{ ...
中的那一刻执行通知。并且确保在主队列上调度任何东西时检查你是否已经不在主线程上(这里,你非常安全,但这通常是一个很好的做法,否则你可能会遇到锁定)。
所以完整的代码将是
if([NSThread isMainThread] == NO){
dispatch_sync(dispatch_get_main_queue(), {...
。