W UITableView najlepsza metoda anulowania operacji GCD dla komórek, które zniknęły z ekranu?

mamUITableView ładuje obrazy z adresu URL do komórek asynchronicznie za pomocą GCD. Problem polega na tym, że użytkownik wykonuje 150 wierszy, ustawia kolejkę 150 operacji i wykonuje. Chcę usunąć z ekranu / anulować te, które przeszły obok i zniknęły z ekranu.

Jak mam to zrobic?

Mój kod w tym momencie (całkiem standardowy):

<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 to aBOOL Ivar wybrałemNO naviewWillDisappear, co (jak sądzę) powoduje szybkie wypchnięcie kolejkiUITableView wyskakuje kontroler nawigacji.

Wróćmy więc do mojego pierwotnego pytania: jak mogę anulować operacje pobierania obrazu dla komórek, które zniknęły z ekranu? Dzięki.

questionAnswers(3)

yourAnswerToTheQuestion