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, или да използвате други механизми (например, съхранение на диск с управление чрез файловата система).