如何删除NSCache中的所有缓存?

时间:2019-04-04 15:48:49

标签: ios swift caching nscache

我正在使用#include<iostream> #include<cstring> using namespace std; class String{ private: char* str; size_t len; public: String(char* str){ len=sizeof(str)/sizeof(char); this->str=new char[(int)len]; strcpy(this->str,str); } String(const String& s){ if(str!=s.str) { strcpy(str,s.str); len=s.len; } } friend void M::print(String);//This line gives compile time error saying M does not exists. // friend class M;//This line on the other hand works completely fine when uncommented }; class M{ public: void print(String s){ cout<<s.str; } }; int main() { char x[6]={'H','e','l','l','o','\0'}; String str=x; M a; a.print(str); return 0; } 来缓存对象。有没有办法一次删除所有缓存?

我正在使用以下方法进行缓存:

NSCache

但是我看到“文档和数据”部分随时间增加(目前为140MB以上)。我尝试使用以下方法清除缓存,但没有成功:

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
    }
}

是否可以检索VC.userCache.removeAllObjects() 的旧实例,因此不必每次加载应用程序时都创建一个新实例?还是有一种方法可以在应用加载时删除所有缓存的对象?

1 个答案:

答案 0 :(得分:0)

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

您还可以在缓存上设置countLimittotalCostLimit属性,以使其大小不会膨胀。