事情是这样的:我有一个滚动视图,它对用户照片的全屏图像进行了延迟加载:
[self.assetsLibrary assetForURL:[NSURL URLWithString:[[self.assets objectAtIndex:index] objectForKey:@"asset_url"]]
resultBlock:^(ALAsset *asset) {
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
CGImageRef cgImage = asset.defaultRepresentation.fullScreenImage;
UIImage *image = [UIImage imageWithCGImage:cgImage];
dispatch_async(dispatch_get_main_queue(), ^{
imageView.image = image;
});
});
}
failureBlock:^(NSError *error) {
NSLog(@"error");
}];
我知道加载全屏图像很昂贵,所以我把它放在后台线程中,但是当我滚动时它仍然滞后。即使我这样改变它仍然滞后:
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
CGImageRef cgImage = asset.defaultRepresentation.fullScreenImage;
UIImage *image = [UIImage imageWithCGImage:cgImage];
imageView.image = image;
dispatch_async(dispatch_get_main_queue(), ^{
});
});
显然,在主队列中无事可做,但它仍然滞后,直到我评论该行:
// CGImageRef cgImage = asset.defaultRepresentation.fullScreenImage;
所以我很困惑,我使用GCD时有什么问题吗?有人可以帮我解释一下吗?任何事情都会有所帮助。
谢谢你们。
更新
致@Fogmeister:照片的大小是全屏大小,actuel imageView 大小约为一半。即使我评论了这一行:“imageView.image = image;” 它仍然滞后。这意味着它不是来自调整大小。我知道时间花在了哪里,在这里:“asset.defaultRepresentation.fullScreenImage;”。当我评论它时,一切都很好,没有更多的滞后。 所以,我不明白的是,我已经把它放在后台线程中......