私は画像処理を行い、結果の画像を表示するアプリに取り組んでいます。UIScrollViewを使用して、ユーザーがすべての画像をスクロールできるようにします。画像は標準のjpgまたはpngではないため、読み込みに時間がかかります。メインキューへのディスパッチが終了したら、GCDを使用して非同期にロードして表示します。スニペットは次のとおりです。
- (void)loadImage:(NSString *)name
{
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
UIImage *image = [Reader loadImage:name];
dispatch_sync(dispatch_get_main_queue(), ^{
[self displayImage:image];
});
});
}
これはほとんどの場合うまく機能します。ただし、スクロール速度が速すぎて、最初に読み込まれた画像が表示される前にメソッドが数回呼び出される場合があります。停止すると、現在のimageViewに前の画像がすばやく表示され、最後に現在の画像が表示されます。これはメモリの問題のためにクラッシュしやすいです。
キューに新しいブロックがある場合(つまり、前のブロックが終了する前にメソッドが再度呼び出される場合)、前のブロックをキャンセルするようにキューに通知する方法があるのでしょうか?または他のより良い提案?
前もって感謝します。