使用后台队列从 url 加载图像仍然不够快

Image loading from url still not fast enough using a background queue

我启动了一个后台队列先加载图片,然后在主队列中更新UIImageView的图片。

        int i = 0;
        for (UIImageView *imageView in self.featuredPhotoImageViewCollection) {
            dispatch_async(dispatch_queue_create("imageQueue", NULL), ^{
                NSURL *url = [NSURL URLWithString:[featuredPhotos[i] valueForKey:@"url"]];
                UIImage *image = [UIImage animatedImageWithAnimatedGIFURL:url];
                dispatch_async(dispatch_get_main_queue(), ^{
                    imageView.image = image;
                });
            });
            i++;
        }

但是,还是不够快。有 0.5 - 1 秒的延迟。除了使用后台队列还有其他建议吗?

您可以使用像 SDWebImage 这样的第三方库来使用缓存,这样可以将您的问题减少到仅在第一次下载时出现。它还具有您可能会觉得有用的优先级选项。

或者您可以在到达显示图像的视图之前下载图像。

你对后台队列的使用有误解。在您的代码中,iOS 将开始执行您的后台代码,同时让主队列不执行任何操作,直到完成后台代码,然后更新主队列中的图像视图。

因此,无论你在后台使用什么队列,这些都不会加快你的速度。

正常使用是 1)显示加载指示器, 2)后台队列{做某事 3)主队列{隐藏加载指示器并更新UI}}

对于您的情况,我的建议是如上所述显示 GIF 图片的快照作为指标。或者您可以简单地显示指标。

或者在其他地方预加载所有 GIF 图片,然后只在此处显示。加载多张图片总是需要一些时间。

如果gif文件很大,服务器支持多线程download.Then你可以尝试dispatch_group下载gif