Sobes.tech
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-ს ან გამოიყენოთ სხვა მექანიზმები (მაგალითად, დისკზე შენახვა ფაილური სისტემის მართვით).