这里滚动和Sametime负载的全屏幕图像从资产的东西: 我有一个滚动视图,它确实延迟加载为用户的照片全屏图像:感觉滞后时,在后台线程
[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时有什么问题吗?有人可以帮我解释一下吗?任何事情都会有所帮助。
谢谢,伙计们。
UPDATE
要@Fogmeister:照片的尺寸是目前全屏幕大小,actuel ImageView的大小大约是一半。即使我评论这一行:“imageView.image = image;”它仍然滞后。这意味着它不是从调整大小。我知道时间在哪里,在这里:“asset.defaultRepresentation.fullScreenImage;”。当我评论它时,一切都很好,没有更多的滞后。 所以,我不明白的是,我已经把它放在后台线程中...
谢谢你的回复。是的,照片的大小是全屏尺寸,实际尺寸是大约一半。即使我评论这一行:“imageView.image = image;”它仍然滞后。这意味着它不是从调整大小。我知道时间在哪里,在这里:“asset.defaultRepresentation.fullScreenImage;”。当我评论它时,一切都很好,没有更多的滞后。我不明白的是,我已经在bg线程中执行了它... – swang
如果您在仪器中使用时间分析器工具进行配置文件,您将开始看到为什么它在特定线路上很慢。绝对值得一试。 – Fogmeister
谢谢,我试过了。最后,我从Appel的例子中解决了这个问题。我发布了答案。但我不明白为什么这样... – swang