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.