Junior — Middle
Ar galite pasidalinti techninio patobulinimo pavyzdžiu, padarytu projekte, ir aprašyti jo įgyvendinimą?
sobes.tech AI
Atsakymas iš AI
Viename iš mano iOS projektų pagerinau vaizdų įkėlimo našumą sąraše (UITableView), įgyvendindamas talpyklą ir asinchroninį įkėlimą.
Įgyvendinimas:
- Naudojau
NSCachejau įkeltų vaizdų saugojimui, kad išvengčiau jų pakartotinio įkėlimo iš tinklo. cellForRowAtmetode tikrinau, ar vaizdas yra talpykloje; jei taip, jį iškart rodžiau.- Jei vaizdas nebuvo talpykloje, pradėjau asinchroninį įkėlimą per URLSession, po įkėlimo išsaugodavau vaizdą talpykloje ir atnaujindavau langelį.
Kodo pavyzdys:
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
}
Tai žymiai sumažino tinklo apkrovą ir pagerino slinkimo sklandumą.