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?

questionAnswers(3)

yourAnswerToTheQuestion