In einer UITableView die beste Methode, um GCD-Vorgänge für Zellen abzubrechen, die vom Bildschirm verschwunden sind?

Ich habe einUITableView Damit werden Bilder von einer URL mithilfe von GCD asynchron in Zellen geladen. Problem ist, wenn ein Benutzer über 150 Zeilen blättert, 150 Operationen anstehen und ausgeführt werden. Was ich möchte, ist, diejenigen zu entfernen, die vorbeizogen und vom Bildschirm verschwunden sind.

Wie mache ich das?

Mein Code an dieser Stelle (ziemlich Standard):

<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 ist einBOOL Ich setze aufNO aufviewWillDisappear, was (glaube ich) dazu führt, dass die Warteschlange dabei schnell gelöscht wirdUITableView Schaltet den Navigationscontroller aus.

Zurück zu meiner ursprünglichen Frage: Wie kann ich die Bildabrufvorgänge für Zellen abbrechen, die vom Bildschirm verschwunden sind? Vielen Dank.

Antworten auf die Frage(3)

Ihre Antwort auf die Frage