Sobes.tech
Junior — Middle

Loyihaga kiritilgan texnik yaxshilanish misolini baham ko‘rishingiz va uning amalga oshirilishini tasvirlashingiz mumkinmi?

sobes.tech AI

AIdan javob

Bir iOS loyihamda, ro‘yxatdagi (UITableView) rasm yuklashning samaradorligini oshirish uchun kesh va asinxron yuklashni joriy qildim.

Amalga oshirish:

  • NSCache dan foydalanib, allaqachon yuklangan rasmlarni saqladim, shuning uchun ularni tarmoqdan qayta yuklamaslik uchun.
  • cellForRowAt metodida, rasm keshda bor-yo‘qligini tekshirdim; agar bo‘lsa, darhol ko‘rsatardim.
  • Agar rasm keshda bo‘lmasa, URLSession yordamida asinxron yuklashni boshladim, yuklashdan so‘ng rasmni keshga saqladim va hujayrani yangiladim.

Kod misoli:

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 tarmoq yuklamasini sezilarli darajada kamaytirishga va skroll qilish jarayonini silliqlashtirishga yordam berdi.