У меня есть UITableView
, который загружает изображения из URL-адреса в ячейки асинхронно, используя GCD. Проблема в том, что если пользователь пролистывает 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
ivar, который я установил в NO
на viewWillDisappear
, который (я думаю )приводит к сбросу очередь быстро, когда это UITableView
выскакивает из навигационного контроллера.
Итак, вернемся к моему первоначальному вопросу :, как мне отменить операции выборки изображения для ячеек, которые исчезли с экрана? Спасибо.