Sobes.tech
Junior — Middle

Projeye yapılan teknik bir iyileştirme örneği paylaşabilir misiniz ve uygulamasını anlatabilir misiniz?

sobes.tech yapay zeka

AI'dan gelen yanıt

Bir iOS projemde, liste (UITableView) içindeki resimlerin yüklenme performansını önbellekleme ve asenkron yükleme uygulayarak artırdım.

Uygulama:

  • NSCache kullanarak zaten yüklenmiş resimleri sakladım, böylece onları tekrar ağdan yüklemekten kaçındım.
  • cellForRowAt metodunda, resmin önbellekte olup olmadığını kontrol ettim; varsa hemen gösterdim.
  • Yoksa, URLSession aracılığıyla asenkron yükleme başlattım, yükleme tamamlandıktan sonra resmi önbelleğe kaydettim ve hücreyi güncelledim.

Kod örneği:

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
}

Bu, ağ üzerindeki yükü önemli ölçüde azalttı ve kaydırma akışkanlığını artırdı.