Junior — Middle
Podes compartilhar um exemplo de melhoria técnica feita no projeto e descrever sua implementação?
sobes.tech IA
Resposta da IA
Num de um dos meus projetos iOS, melhorei o desempenho do carregamento de imagens na lista (UITableView) através da implementação de cache e carregamento assíncrono.
Implementação:
- Usei
NSCachepara armazenar as imagens já carregadas, evitando recarregá-las da rede. - No método
cellForRowAt, verificava se a imagem estava no cache; se sim, exibia-a imediatamente. - Se a imagem não estivesse no cache, iniciava um carregamento assíncrono via URLSession, e após o carregamento, armazenava a imagem no cache e atualizava a célula.
Exemplo de código:
let imageCache = NSCache<NSString, UIImage>()
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath)
let urlString = imageURLs[indexPath.row]
if let cachedImage = imageCache.object(forKey: urlString as NSString) {
cell.imageView?.image = cachedImage
} else {
cell.imageView?.image = nil
DispatchQueue.global().async {
if let url = URL(string: urlString),
let data = try? Data(contentsOf: url),
let image = UIImage(data: data) {
self.imageCache.setObject(image, forKey: urlString as NSString)
DispatchQueue.main.async {
if let updateCell = tableView.cellForRow(at: indexPath) {
updateCell.imageView?.image = image
updateCell.setNeedsLayout()
}
}
}
}
}
return cell
}
Isto reduziu significativamente a carga na rede e melhorou a fluidez do scroll.