我是 GCD 和块的新手,我正在轻松进入它。
背景:我正在使用 ALAssetsLibrary 为 UIScrollView 开发延迟加载例程。当我的 UIScrollView 加载时,我用aspectRatioThumbnails
我的 ALAsset 填充它,然后当用户滚动时,我调用下面的例程来加载fullScreenImage
当前正在显示的 ALAsset。它似乎工作。
(如果有人有更好的延迟加载例程,请发表评论。我已经查看了我能找到的所有内容以及 WWDC 视频,但他们似乎更多地处理平铺或比我需要的复杂得多)
我的问题:我使用后台线程来处理加载fullScreenImage
,完成后我使用主线程将其应用于 UIImageView。我需要使用主线程吗?我已经看到所有 UIKit 更新都需要在主线程上进行,但我不确定这是否适用于 UIImageView。我想它确实如此,因为它是一个屏幕元素,但后来我意识到我根本不知道。
- (void)loadFullSizeImageByIndex:(int)index
{
int arrayIndex = index;
int tagNumber = index+1;
ALAsset *asset = [self.assetsArray objectAtIndex:arrayIndex];
__weak typeof(self) weakSelf = self;
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{
UIImage *tmpImage = [[UIImage alloc] initWithCGImage:asset.defaultRepresentation.fullScreenImage];
if ([weakSelf.scrollView viewWithTag:tagNumber] != nil){
dispatch_async(dispatch_get_main_queue(), ^{
if ([weakSelf.scrollView viewWithTag:tagNumber]!= nil){
UIImageView * tmpImageView = (UIImageView*)[weakSelf.scrollView viewWithTag:tagNumber];
tmpImageView.image = tmpImage;
}
});
}
});
}