В UITableView лучший способ отменить операции GCD для ячеек, которые вышли за пределы экрана?
у меня естьUITableView
который загружает изображения из URL в ячейки асинхронно, используя GCD. Проблема в том, что если пользователь пролистывает 150 строк, 150 операций ставятся в очередь и выполняются. Я хочу удалить из очереди / отменить те, которые прошли мимо и исчезли с экрана.
Как мне это сделать?
Мой код на данный момент (довольно стандартный):
<code>- (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]; } }); } }); </code>
runQ являетсяBOOL
я установилNO
наviewWillDisappear
что (я думаю) приводит к быстрому очищению очереди, когда этоUITableView
выскакивает навигационный контроллер.
Итак, вернемся к моему первоначальному вопросу: как отменить операции извлечения изображения для ячеек, которые вышли за пределы экрана? Благодарю.