Junior — Middle
Meg tudnád osztani egy technikai fejlesztés példáját, amit a projektben végrehajtottál, és leírnád annak megvalósítását?
sobes.tech MI
Válasz az MI-től
Egy iOS projektben javítottam a lista (UITableView) képek betöltési teljesítményét cache-eléssel és aszinkron betöltéssel.
Implementáció:
- Az
NSCache-t használtam már betöltött képek tárolására, így elkerülve azok újratöltését a hálózatból. - A
cellForRowAtmetódusban ellenőriztem, hogy a kép benne van-e a cache-ben; ha igen, azonnal megjelenítettem. - Ha nem volt a cache-ben, aszinkron betöltést indítottam URLSession segítségével, és a betöltés után a képet a cache-be mentettem és frissítettem a cellát.
Kód példa:
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
}
Ez jelentősen csökkentette a hálózati terhelést és javította a görgetés folyékonyságát.