これが問題です:私はスクロールビューを持っています、それはユーザーの写真のフルスクリーン画像の遅延ロードをしました:
[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 様へ : 写真のサイズは全画面サイズ、実際の imageView サイズは半分程度です。「imageView.image = image;」という行にコメントを付けても。まだラグです。つまり、サイズ変更によるものではありません。ここでは、「asset.defaultRepresentation.fullScreenImage;」に時間がかかっていることを知っています。コメントすると、すべて問題なく、ラグはなくなりました。 だから、私が理解していないのは、すでにバックグラウンドスレッドに入れているということです...