我有一个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 是BOOL
我设置为NO
on的 ivar viewWillDisappear
,(我认为)当它UITableView
从导航控制器中弹出时,它具有快速清除队列的效果。
那么,回到我最初的问题:如何取消已离开屏幕的单元格的图像获取操作?谢谢。