В UITableView лучший способ отменить операции GCD для ячеек, которые исчезли с экрана?

У меня есть 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 — это BOOLivar, который я установил в NOна viewWillDisappear, который (я думаю )приводит к сбросу очередь быстро, когда это UITableViewвыскакивает из навигационного контроллера.

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

6
задан Steven 2 May 2012 в 08:25
поделиться