Em um UITableView, o melhor método para cancelar operações do GCD para células que saíram da tela?

eu tenho umUITableView que carrega imagens de um URL em células de forma assíncrona usando o GCD. O problema é que, se um usuário passar 150 linhas, 150 operações serão colocadas em fila e executadas. O que eu quero é desqualificar / cancelar os que passaram e saíram da tela.

Como eu faço isso?

Meu código neste momento (bastante padrão):

<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 é umBOOL ivar eu definir paraNO emviewWillDisappear, o que (eu acho) tem o efeito de liberar a fila rapidamente quando issoUITableView sai do controlador de navegação.

Então, voltando à minha pergunta original: como eu cancelo as operações de busca de imagem das células que saíram da tela? Obrigado.

questionAnswers(3)

yourAnswerToTheQuestion