En un UITableView, ¿el mejor método para cancelar las operaciones GCD para las celdas que han salido de la pantalla?

tengo unUITableView que carga imágenes de una URL en celdas de forma asíncrona utilizando GCD. El problema es que si un usuario pasa las 150 filas, 150 operaciones se ponen en cola y se ejecutan. Lo que quiero es poner en cola / cancelar los que pasaron volando y salieron de la pantalla.

¿Cómo hago esto?

Mi código en este punto (bastante estándar):

<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 es unBOOL ivar me puse aNO enviewWillDisappear, lo que (creo) tiene el efecto de limpiar la cola rápidamente cuando estoUITableView se sale del controlador de navegación.

Entonces, volviendo a mi pregunta original: ¿cómo cancelo las operaciones de recuperación de imagen para las celdas que se han salido de la pantalla? Gracias.

Respuestas a la pregunta(3)

Su respuesta a la pregunta