Sobes.tech
Junior — Middle

Жобада жасалган техникалык жакшыртуунун мисалын бөлүшө аласызбы жана анын ишке ашырылышын сүрөттөп берсеңиз?

sobes.tech AI

AIден жооп

Менин iOS долбоорлорумдун биринде, сүрөттөрдү жүктөө ылдамдыгын жакшыртуу үчүн кэш жана асинхрон жүктөөнү колдонуп жатам.

Иштөө:

  • NSCache колдонуп, алдын ала жүктөлгөн сүрөттөрдү сактап калдым, ошондуктан алардын кайрадан тармактан жүктөлүшүн алдын алдым.
  • cellForRowAt методунда сүрөт кэште бар-жогун текшерип, эгер бар болсо, дароо көрсөттүм.
  • Эгер жок болсо, URLSession аркылуу асинхрон жүктөөнү баштап, жүктөлгөндөн кийин сүрөттү кэшке сактап, клетканы жаңырттым.

Коддун мисалы:

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
}

Бул ыкма тармак жүктөмүн кыйла азайтып, сүрөттөө ылдамдыгын жакшыртат.