Imagens de carga preguiçosa no UITableViewCell

Eu tenho umas 50 células customizadas no meu UITableView. Quero exibir uma imagem e um label nas células em que recebo as imagens dos URLs.

Eu quero fazer uma carga preguiçosa de imagens para que a interface do usuário não congele enquanto as imagens estão sendo carregadas. Eu tentei obter as imagens em segmentos separados, mas eu tenho que carregar cada imagem toda vez que uma célula se torna visível novamente (caso contrário, reutilização de células mostra imagens antigas)

Aplicativos como o Facebook carregam imagens apenas para células atualmente visíveis e, assim que as imagens são carregadas, elas não são carregadas novamente. Alguém pode me dizer como duplicar esse comportamento.

Obrigado.

Editar
Tentando esconder imagens em um object NSMutableDictionary cria problemas quando o usuário rola rápido. Eu estou recebendo imagens apenas quando a rolagem pára completamente e limpando o cache no aviso de memory. Mas o aplicativo invariavelmente recebe um aviso de memory (devido ao tamanho das imagens armazenadas em cache) e limpa o cache antes de recarregar. Se a rolagem for muito rápida, ela trava.

Quaisquer outras sugestões são bem-vindas

Carregar as imagens em um segmento de plano de fundo ainda é uma boa ideia. Se você não quiser recarregá-los toda vez, sugiro configurar um NSMutableDictionary e armazenar as imagens lá. Você poderia usar um identificador único, como o ID da linha ou até mesmo o nome da imagem, como a chave de cada imagem.

Ao carregar uma célula, você enviaria uma mensagem objectForKey: para o NSMutableDictionary para recuperar a imagem dessa célula específica (com base na sua chave exclusiva para ela). Se ele retornar nulo, significa que a imagem está faltando no cache e você precisará do seu segmento de carregamento de imagem de fundo para recuperá-lo. Caso contrário, você receberá de volta a imagem apropriada para a célula da tabela ser exibida. Em um aviso de memory, você pode limpar esse cache de imagens sem efeitos adversos (além de forçá-las a serem recarregadas novamente sob demanda).

Acabei de enfrentar com êxito o mesmo problema usando uma NSOperation personalizada para carregar as imagens em um fasion de filas e armazená-las em um NSMutableDictionary estático como um cache. Abaixo está um link para a base do código que usei para resolver o problema.

Carregando imagens remotas para o UITableViewCell

Melhor para ler todos os tópicos no fórum para ajudar você a entender o que realmente está acontecendo.

lostInTransit,

Eu estou tendo um problema semelhante e ao explorar as várias soluções possíveis eu encontrei este post:

davidgolightly.blogspot.com/2009/02/asynchronous-image-caching-with-iphone.html

Eu também sugiro que você baixe a amostra URLCache do site do desenvolvedor da Apple:

developer.apple.com/iphone/prerelease/library/samplecode/URLCache /

E aqui está outro post sobre o problema:

http://www.markj.net/iphone-asynchronous-table-image/

Eu adoraria que você compartilhasse suas descobertas também.

Para aqueles que estão interessados, e são preguiçosos como eu, gostaria de sugerir uma implementação de código aberto (licença MIT) de rede preguiçosa / armazenada em cache de imagens UIImageView: SDWebImage

Carregamento preguiçoso é como um pedido de tipo síncrono. Significa esperar por responder

botão de imagem do ego é a solução para isso ..

botão de imagem do ego é pedido de tipo asynchronous.não espere responder..apenas exibir dados de cada vez ….

você pode baixar a pasta do github ….

adicione ao seu projeto …

na vista de imagem xib..at, altere a class para o botão de imagem do ego …

fazer object dele em m arquivo …

você pode usar…..

UITableView com cache de imagens e redimensionamento / configuração no thread de plano de fundo:

http://blog.slaunchaman.com/2011/08/12/gcd-example-updated-now-with-more-speed/

Este é um tutorial sobre NSOperation com exemplos que mostram como Lazy load images in UITableViewCell