Sobes.tech
Middle+

Ինչպե՞ս կիրականացնեիք հիշողության մաքրման պահած տեսակների և բանալիների միջոցով։

sobes.tech AI

Պատասխան AI-ից

Ես կօգտագործեի NSCache կամ մասնագիտացված cache մենեջերներ։ NSCache ավտոմատ կերպով կառավարում է հիշողությունը և անհրաժեշտության դեպքում ազատում է օբյեկտները։

Օրինակ՝ NSCache-ի հետ.

import Foundation

class DataCache {
    private let cache = NSCache<NSString, NSData>() // Տվյալների cache

    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() // Բոլոր cache-ները մաքրել
    }
}

NSCache-ը ունի առավելություններ NSDictionary կամ Swift.Dictionary-ի նկատմամբ՝

  • Ավտոմատ հեռացում: Հեռացնում է օբյեկտները հիշողության պակասի դեպքում։
  • Բազմա-թելային անվտանգություն: Անվտանգ է տարբեր թելերից օգտագործելու համար։
  • Թույլ հղումներ: Չպահպանում է ուժեղ հղումներ օբյեկտներին, ինչը կանխում է հիշողության լիքերը։

Ավելին՝ ավելի բարդ cache-ների համար (օրինակ՝ ժամկետի ավարտ կամ չափի սահմանափակմամբ) կարող եք ստեղծել ձեր սեփական մենեջեր դասը, որը կօղակած լինի NSCache-ին կամ օգտագործել այլ մեխանիզմներ (օրինակ՝ պահպանում disk-ով և ֆայլային համակարգի կառավարման միջոցով):