Junior — Middle
Puoi condividere un esempio di miglioramento tecnico apportato al progetto e descriverne l'implementazione?
sobes.tech AI
Risposta dell'AI
In uno dei miei progetti iOS, ho migliorato le prestazioni del caricamento delle immagini nella lista (UITableView) implementando la memorizzazione nella cache e il caricamento asincrono.
Implementazione:
- Ho usato
NSCacheper memorizzare le immagini già caricate, evitando di ricaricarle dalla rete. - Nel metodo
cellForRowAt, verificavo se l’immagine era in cache; in tal caso, la mostravo immediatamente. - Se l’immagine non era in cache, avviavo un caricamento asincrono tramite URLSession, e dopo il caricamento, memorizzavo l’immagine in cache e aggiornavo la cella.
Esempio di codice:
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
}
Questo ha notevolmente ridotto il carico sulla rete e migliorato la fluidità dello scorrimento.