如何删除 NSCache 中的所有缓存



我正在使用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
    }
}

但我看到文档和数据部分随着时间的推移而增加(目前为140MB+(。我尝试使用以下方法清除缓存,但没有成功:

VC.userCache.removeAllObjects()

有没有办法检索NSCache的旧实例,这样我就不必在每次加载应用程序时都创建新实例?或者有没有办法在应用程序加载时删除所有缓存的对象?

你的意思是 removeAllObjects(( 不起作用?您确定使用的内存来自此缓存吗?如果缓存由多个 ViewController 使用,则应在这些 ViewController 之外创建和管理它,这样您就不会创建多个实例,例如 CacheManager 类或类似的东西。

还可以在缓存上设置countLimit和totalCostLimit属性,以便它的大小不会膨胀。

最新更新