Sobes.tech
Junior — Middle

Kun je een voorbeeld delen van een technische verbetering die in het project is aangebracht en de implementatie ervan beschrijven?

sobes.tech AI

Antwoord van AI

In een van mijn iOS-projecten heb ik de laadsnelheid van afbeeldingen in de lijst (UITableView) verbeterd door caching en asynchroon laden toe te passen.

Implementatie:

  • Ik gebruikte NSCache om al geladen afbeeldingen op te slaan, zodat ze niet opnieuw uit het netwerk hoeven te worden geladen.
  • In de cellForRowAt-methode controleerde ik of de afbeelding in de cache zat; zo ja, toonde ik deze direct.
  • Als de afbeelding niet in de cache zat, startte ik een asynchrone laadactie via URLSession, en na het laden, bewaarde ik de afbeelding in de cache en werkte ik de cel bij.

Voorbeeld code:

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
}

Dit heeft de belasting op het netwerk aanzienlijk verminderd en de vloeiendheid van het scrollen verbeterd.