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
NSCacheom 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.