UITableView
GCD を使用して URL からセルに画像を非同期的にロードする があります。問題は、ユーザーが 150 行を超えてフリックすると、150 の操作がキューに入れられて実行されることです。私が望むのは、過去に吹き飛ばされて画面から消えたものをデキュー/キャンセルすることです。
どうすればいいですか?
この時点での私のコード(かなり標準):
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
// after getting the cell...
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
if (runQ) {
NSString *galleryTinyImageUrl = [[self.smapi getImageUrls:imageId imageKey:imageKey] objectForKey:@"TinyURL"];
NSData *imageData = [[NSData alloc] initWithContentsOfURL:[NSURL URLWithString:galleryTinyImageUrl]];
dispatch_async(dispatch_get_main_queue(), ^{
if (imageData != nil) {
UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
cell.imageView.image = [UIImage imageWithData:imageData];
}
});
}
});
runQ は、私がonBOOL
に設定した ivar であり、これは (私が思うに)ナビゲーション コントローラーから飛び出したときにキューを急速にフラッシュする効果があります。NO
viewWillDisappear
UITableView
元の質問に戻りますが、画面から消えたセルの画像取得操作をキャンセルするにはどうすればよいですか? ありがとう。