Sobes.tech
Junior — Middle

Poți împărtăși un exemplu de îmbunătățire tehnică adusă proiectului și să descrii implementarea acesteia?

sobes.tech AI

Răspuns de la AI

În unul dintre proiectele mele iOS, am îmbunătățit performanța încărcării imaginilor în listă (UITableView) prin implementarea caching-ului și încărcării asincrone.

Implementare:

  • Am folosit NSCache pentru a stoca imaginile deja încărcate, evitând reîncărcarea lor din rețea.
  • În metoda cellForRowAt, verificam dacă imaginea este în cache; dacă da, o afișam imediat.
  • Dacă imaginea nu este în cache, inițiam o încărcare asincronă prin URLSession, iar după încărcare, stocam imaginea în cache și actualizăm celula.

Exemplu de cod:

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
}

Acest lucru a redus semnificativ încărcarea pe rețea și a îmbunătățit fluiditatea derulării.