Carregar imagem de CoreData em cellForRowAtIndexPath diminui a rolagem
Eu estou trabalhando em um UITableView que é muito parecido com o aplicativo nativo Photo do iOS: ele tem muitas linhas com 4 miniaturas de imagem em cada linha. (por exemplo, cada UITableViewCell tem 4 UIImageViews) Todas as miniaturas carregadas do Core Data.
Revisei minha implementação várias vezes e posso ver melhorias no desempenho, mas ainda não consigo rolar tão bem quanto o aplicativo Foto.
Eu preciso informar sobre como armazenar corretamente as fotos para melhor desempenho. Isso é o que eu tentei:
1. Minha primeira tentativa (atraso na rolagem)
As imagens são armazenadas com o tipo Transformável no CoreData.Na função cellForRow, cada imagem é obtida do CoreData em tempo real.2. Segunda tentativa (mais rápida, mas ainda demora um pouco ao rolar)
As imagens são armazenadas com o tipo Dados binários com a opção 'armazenamento externo' marcada no CoreData.Na função cellForRow, cada imagem é carregada pela primeira vez a partir do Core Data e depois armazenada no NSCache na memória, então da próxima vez que cellForRow disparar, usaremos o UIImage do NSCache diretamente, se disponível.Depois de usar o NSCache para armazenar em cache imagens carregadas do CoreData, a rolagem é visivelmente mais rápida, mas como as imagens ainda precisam ser carregadas do CoreData quando ainda não estão disponíveis no NSCache, a rolagem ainda será irregular de tempos em tempos.
Então, deve haver uma maneira melhor, eu poderia pré-carregar todas as imagens na memória, mas como pode haver um grande número ou linhas de imagens, então eu não planejo pré-carregar as imagens.
O que mais posso fazer para carregar a imagem mais rapidamente em cellForRowAtIndexPath?