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:
NSCachedan foydalanib, allaqachon yuklangan rasmlarni saqladim, shuning uchun ularni tarmoqdan qayta yuklamaslik uchun.cellForRowAtmetodida, 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.