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.