Как удалить весь кеш в NSCache? - PullRequest
0 голосов
/ 04 апреля 2019

Я использую NSCache для кэширования объектов. Есть ли способ удалить весь кеш сразу?

Я использую следующие методы для кэширования:

class VC: UIViewController {
    static let userCache = NSCache<NSString, User>()

    func getUser(fromId id: String, completion: @escaping (_ user: User) -> Void) {
        if let cachedVersion = VC.userCache.object(forKey: id as NSString) {
            print("using cached user from id")
            completion(cachedVersion)
            return
        }

        // retrieve new instance of object
    }
}

Но я вижу, что раздел Документы и данные увеличивается со временем (в настоящее время 140 МБ +) Я пытался очистить кеш, используя следующий метод, но это не сработало:

VC.userCache.removeAllObjects()

Есть ли способ получить старый экземпляр NSCache, поэтому мне не нужно создавать новый экземпляр при каждой загрузке приложения? Или есть способ удалить все кэшированные объекты при загрузке приложения?

1 Ответ

0 голосов
/ 04 апреля 2019

Что вы имеете в виду, что removeAllObjects () не работает?Вы уверены, что память, которую вы используете из этого кэшаЕсли кэш используется несколькими ViewControllers, вы должны создать его и управлять им вне этих ViewControllers, чтобы не создавать несколько экземпляров, например, класс CacheManager или что-то в этом роде.

Есть также countLimit и totalCostLimit свойства, которые вы можете установить в своем кэше, чтобы он не увеличивался в размерах.

...