В 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 выскакивает навигационный контроллер.

Итак, вернемся к моему первоначальному вопросу: как отменить операции извлечения изображения для ячеек, которые вышли за пределы экрана? Благодарю.

Ответы на вопрос(3)

Ваш ответ на вопрос