Middle+
როგორ განახორციელებდით მეხსიერების სისუფთავის დაცვას შენახული ტიპებისა და გასაღებების მეშვეობით?
sobes.tech AI
პასუხი AI-სგან
მე გამოვიყენებდი NSCache-ს ან სპეციალიზებულ კეშ მენეჯერს. NSCache ავტომატურად მართავს მეხსიერებას და საჭიროების შემთხვევაში იწერს ობიექტებს.
მაგალითი NSCache-თან:
import Foundation
class DataCache {
private let cache = NSCache<NSString, NSData>() // მონაცემების კეში
func setData(_ data: Data, forKey key: String) {
let nsKey = key as NSString
let nsData = data as NSData
cache.setObject(nsData, forKey: nsKey) // მონაცემების შენახვა გასაღებით
}
func getData(forKey key: String) -> Data? {
let nsKey = key as NSString
guard let nsData = cache.object(forKey: nsKey) else {
return nil
}
return nsData as Data // მონაცემების მიღება გასაღებით
}
func removeData(forKey key: String) {
let nsKey = key as NSString
cache.removeObject(forKey: nsKey) // მონაცემების წაშლა გასაღებით
}
func removeAllData() {
cache.removeAllObjects() // მთლიანი კეშის გასუფთავება
}
}
NSCache-ს აქვს უპირატესობა NSDictionary ან Swift.Dictionary-თან შედარებით:
- ავტომატური წაშლა: როდესაც მეხსიერება იკლებს, ობიექტებს წაშლის.
- მრავალთრედ უსაფრთხო: უსაფრთხოა სხვადასხვა თრედიდან გამოყენებისთვის.
- სუსტი მითითებები: არ ინახავს ძლიერ მითითებებს ობიექტებზე, რაც თავიდან აცილებს მეხსიერების ლიკებს.
მრავალმხრივი კეშის ლოგიკისთვის (მაგალითად, ვადით გასვლის ან ზომის შეზღუდვით) შეგიძლიათ შექმნათ საკუთარი მენეჯერის კლასი, რომელიც ორბოლებს NSCache-ს ან გამოიყენოთ სხვა მექანიზმები (მაგალითად, დისკზე შენახვა ფაილური სისტემის მართვით).