1. 程式人生 > >iOS—快取YYCache框架

iOS—快取YYCache框架

下載地址 :點選開啟連結

一、簡介: 計算上的的cache 就是快取記憶體,計算機組成課程裡的定義是,存在於主存和cpu之間,主要用於解決CPU處理資料的速度遠遠大於讀取主存資料的速度。 手機上也有cache ,主要作用是儲存一些軟體生成的臨時檔案,避免每次都要重複地向伺服器請求相同的資料,即浪費使用者流量,也影響app響應速度。 二、YYCache 的組成 YYCache 由YYcache、YYDiskCache、YYMemoryCache 和YYKVStroage組成,其中YYKVStorage可直接對sqlite 和檔案系統進行讀寫(YYDiskCache的底屋實現)
注意點 1.如果儲存的自定義物件不遵守 NSCoding
的協議或不實現 NSCoding協議的方法,就不能使用YYDiskCache進行長期快取; - (void)encodeWithCoder:(NSCoder *)aCoder;- (instancetype)initWithCoder:(NSCoder *)aDecoder;
一、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);
    }