iOS—快取YYCache框架
阿新 • • 發佈:2018-11-15
下載地址 :點選開啟連結
注意點 1.如果儲存的自定義物件不遵守 NSCoding
一、YYCache 基本使用 1、同步方式
//模擬資料 NSString *[email protected]"I want to know who is lcj ?"; //模擬一個key //同步方式 NSString *
[email protected]"key"; YYCache *yyCache=[YYCache cacheWithName:@"LCJCache"]; //根據key寫入快取value [yyCache setObject:value forKey:key]; //判斷快取是否存在 BOOL isContains=[yyCache containsObjectForKey:key]; NSLog(@"containsObject : %@", [email protected]"YES":@"NO"); //根據key讀取資料 id vuale=[yyCache objectForKey:key]; NSLog(@"value : %@",vuale); //根據key移除快取 [yyCache removeObjectForKey:key]; //移除所有快取 [yyCache removeAllObjects];
2、非同步方式
//模擬資料
NSString *[email protected]"test文字";
//存取時key
NSString *key [email protected]"key";
//建立目錄
YYCache *cache=[YYCache cacheWithName:@"haha"];
//判斷快取是否存在
[cache containsObjectForKey:key withBlock:^(NSString * _Nonnull key, BOOL contains) {
}];
//根據key寫入快取
[cache setObject:value forKey:key withBlock:^{
}];
//讀取
[cache objectForKey:key withBlock:^(NSString * _Nonnull key, id<NSCoding> _Nonnull object) {
NSLog(@"%@",object);
}];
//根據key 移除快取
[cache removeObjectForKey:key withBlock:^(NSString * _Nonnull key) {
}];
// 移除所有快取
[cache removeAllObjectsWithBlock:^{
}];
//移除所有快取帶進度
[cache removeAllObjectsWithProgressBlock:^(int removedCount, int totalCount) {
} endBlock:^(BOOL error) {
if (!error) {
NSLog(@"移除成功");
}
else
{
NSLog(@"移除失敗");
}
}];
二、YYCache 快取LRU清理
LRU(Least Recently used)演算法大家都比較熟悉,翻譯過來就是“最近最少使用”,LRU快取就是使用這種原理實現,簡單的說就是快取一定量的資料,當超過設定的閾值時就把一些過期的資料刪除掉,比如我們快取10000條資料,當資料小於10000時可以隨意新增,當超過10000時就需要把新的資料新增進來,同時要把過期資料刪除,以確保我們最大快取10000條,那怎麼確定刪除哪條過期資料呢,採用LRU演算法實現的話就是將最老的資料刪掉。
YYCache *cache=[YYCache cacheWithName:@"myText"];
//記憶體最大快取資料個數
[cache.memoryCache setCountLimit:50];
//記憶體最大快取開銷,目前這個沒有效果
[cache.memoryCache setCostLimit:1*1024];
//磁碟最大快取開銷
[cache.diskCache setCostLimit:1*1024];
//磁碟最大快取資料個數
[cache.diskCache setCountLimit:50];
//設定磁碟lru動態清理頻率 預設 60秒
[cache.diskCache setAutoTrimInterval:60];
for (int i=0; i<100; i++) {
NSString *str=[NSString stringWithFormat:@"第%d條資料",i+1];
NSString *key=[NSString stringWithFormat:@"key%d",i];
[cache setObject:str forKey:key];
}
NSLog(@"cache.memoryCache.totalCost=%lu",(unsigned long)cache.memoryCache.totalCost);
NSLog(@"cache.memoryCache.costLimit=%lu",(unsigned long)cache.memoryCache.costLimit);
NSLog(@"cache.memoryCache.totalCount=%lu",(unsigned long)cache.memoryCache.totalCount);
NSLog(@"cache.memoryCache.countLimit=%lu",(unsigned long)cache.memoryCache.countLimit);
NSLog(@"cache.diskCache.totalCost=%lu",(unsigned long)cache.diskCache.totalCost);
NSLog(@"cache.diskCache.costLimit=%lu",(unsigned long)cache.diskCache.costLimit);
NSLog(@"cache.diskCache.totalCount=%lu",(unsigned long)cache.diskCache.totalCount);
NSLog(@"cache.diskCache.countLimit=%lu",(unsigned long)cache.diskCache.countLimit);
for(int i=0 ;i<100;i++){
//模擬一個key
NSString *key=[NSString stringWithFormat:@"key%d",i];
id vuale=[cache objectForKey:key];
NSLog(@"%@=%@",key ,vuale);
}