在后台加载UIImageView
对象是否安全,完成后,将它们插入主线程的视图层次结构中?
例如,您创建一个GCD块,在后台加载10个图像视图。最后,您有异步块,它会将所有UIImageViews
添加到视图层次结构中。
我听说如果您创建UIImage
并将其添加到UIImageView
,那么当UIImageView
需要时,图像数据会按需加载。我如何强制UIImage
数据在后台被拉动,以便在长时间加载时不会阻塞主线程?
答案 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
类别,它可以在后台加载图像,也可以对其进行缓存,因此如果您想再次下载,则会从缓存中显示该图像。