UITableView に画像を非同期 (GCD) で読み込んでいますが、セルが 1 つに落ち着く前に複数の画像を「シャッター」するという奇妙な動作が見られます。言葉で説明するのは難しいので、スクリーン レコーディングを作成しました。特定のセルについて、1 つのセルに落ち着く前に複数の画像が移動することがわかります。
http://www.youtube.com/watch?v=PKuqng81QX4
キューを使用して (REST エンドポイントから) 画像をフェッチしてから、メイン キューを使用してセルに画像を設定しています。コード スニペットは次のとおりです。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
// ..after getting the cell:
dispatch_queue_t imageQ = dispatch_queue_create("imageQ", NULL);
dispatch_async(imageQ, ^{
NSString *galleryTinyImageUrl = someFunctionToGetThumbnailUrl;
NSData *imageData = [[NSData alloc] initWithContentsOfURL:[NSURL URLWithString:galleryTinyImageUrl]];
dispatch_async(dispatch_get_main_queue(), ^{
cell.imageView.image = [UIImage imageWithData:imageData];
[tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationNone];
});
});
dispatch_release(imageQ);
これが短時間に複数回呼び出されるという事実 (つまり、ユーザーがテーブルを上にフリックすると、これらのセル イメージのロードが 30 回トリガーされて起動されます) は、すべての非同期スレッドがどこに安全に「着陸」するかという懸念を引き起こします。するはずです。私が見ている動作 (ビデオ) は、私がここで何か間違ったことをしていることを検証しているようです. あなたが持っているかもしれない詳細または幅広いアプローチの提案をいただければ幸いです。
助けてくれてありがとう!