如何在后台加载UIImageView对象?

时间:2014-01-16 11:44:47

标签: ios iphone ipad uiimageview uiimage

在后台加载UIImageView对象是否安全,完成后,将它们插入主线程的视图层次结构中?

例如,您创建一个GCD块,在后台加载10个图像视图。最后,您有异步块,它会将所有UIImageViews添加到视图层次结构中。

我听说如果您创建UIImage并将其添加到UIImageView,那么当UIImageView需要时,图像数据会按需加载。我如何强制UIImage数据在后台被拉动,以便在长时间加载时不会阻塞主线程?

1 个答案:

答案 0 :(得分:1)

如果您从服务器下载图像总是更好,您可以在单独的线程上下载它们,这样就不会阻止您的UI。图像下载完成后,您可以将其设置为主线程中的特定图像视图。

__weak typeof(self) weakSelf = self;
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^(void) {
        NSData *imageData= [NSData dataWithContentsOfURL:Image_URL];
        UIImage *image = [UIImage imageWithData:imageData];

        dispatch_sync(dispatch_get_main_queue(), ^(void) {
           __strong __typeof__(weakSelf) strongSelf = weakSelf;
           strongSelf.someImageView.image = image;
            ;
        });
    });

注意: 如果您使用的是AFNetworking,则可以使用UIImageView类别,它可以在后台加载图像,也可以对其进行缓存,因此如果您想再次下载,则会从缓存中显示该图像。