EGOCache 缓存框架详细讲解


平常大多用SDWebimage做图片的缓存,如果做语音聊天SDWebimage就不太够用
,所以推荐用EGOCache做文件缓存。
EGOCache采用磁盘存储方式存储,如果文件使用频率很高可以缓存到内存中,减少io操作。


1.EGOCache 作用

EGOCache可以缓存实现了<NSCodeing>协议的对象、图片、语音、plist文件

2.EGOCache 安装

pod 'EGOCache', '~> 2.1.3'

3.EGOCache 使用
/**
  *  创建缓存目录
  *
  *  @return 缓存目录
  */
-(NSString *)createCacheDirection
{
//沙盒目录
NSLog(@"-----%@",NSHomeDirectory());
//Document 文件夹目录
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *pathDocuments = [paths objectAtIndex:0];
//创建缓存目录
NSString *createPath = [NSString stringWithFormat:@"%@/MessageCache", pathDocuments];
// 判断文件夹是否存在,如果不存在,则创建
if (![[NSFileManager defaultManager] fileExistsAtPath:createPath]) {
    NSFileManager *fileManager = [[NSFileManager alloc] init];
   BOOL result = [fileManager createDirectoryAtPath:createPath withIntermediateDirectories:YES attributes:nil error:nil];
    if (result) {
        return createPath;
    }else
    {
        return nil;
    }
} else {
    NSLog(@"FileDir is exists.");
    return createPath;
}
}  
初始化缓存
//initWithCacheDirectory 指定缓存目录 
  EGOCache *egocache = [[EGOCache globalCache] initWithCacheDirectory:cacheDirectory];     

如果不指定缓存路径,默认缓存到library下的cache目录下

//清除缓存
[egocache clearCache];  

//设置缓存时间 默认时间一天  一天的时间表示:24*60*60
egocache.defaultTimeoutInterval = 60;

缓存文字

//缓存文字
NSString *cacheString = @"111111111111";
[egocache setString:cacheString forKey:@"string"];
//是否有这个缓存
BOOL ishaveCacheFile = [egocache hasCacheForKey:@"string"];
if (ishaveCacheFile) {
    //读取文字
    NSString *currentCacheString = [egocache stringForKey:@"string"];
    NSLog(@"缓存的文字:%@",currentCacheString);
}

缓存图片

先下载图片
   -(void)downloadFileWithURLString:(NSString *)aURLString   withFileName:(NSString *)aCacheName
 {
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:aURLString]];
NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:configuration];
NSURLSessionDownloadTask *downloadTask  =  [manager downloadTaskWithRequest:request progress:^(NSProgress * _Nonnull downloadProgress) {
    
} destination:^NSURL * _Nonnull(NSURL * _Nonnull targetPath, NSURLResponse * _Nonnull response) {
    NSURL *downloadURL = [[NSFileManager defaultManager] URLForDirectory:NSDocumentDirectory inDomain:NSUserDomainMask appropriateForURL:nil create:NO error:nil];
    return [downloadURL URLByAppendingPathComponent:[response suggestedFilename]];
    
} completionHandler:^(NSURLResponse * _Nonnull response, NSURL * _Nullable filePath, NSError * _Nullable error) {
    //此处已经在主线程了
    UIImage *image = [UIImage imageWithData:[NSData dataWithContentsOfURL:filePath]];
    
    //拿到图片后缓存起来
    EGOCache *egocache = [EGOCache globalCache];
    [egocache setImage:image forKey:aCacheName];
    
    dispatch_async(dispatch_get_main_queue(), ^{
        int a = [[aCacheName stringByReplacingOccurrencesOfString:@"cache_" withString:@""] intValue];
        CGFloat image_width = 10;
        UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(a*image_width, a*image_width, image_width, image_width)];
        EGOCache *egocache = [EGOCache globalCache];
        imageView.image = [egocache imageForKey:aCacheName];
        [self.view addSubview:imageView];
    });
}];
//开始任务
[downloadTask resume];
}
读取图片
//是否有这个缓存
BOOL ishaveCacheImage = [egocache hasCacheForKey:@"cache_0"];
if (ishaveCacheImage) {
    //读取图片
    UIImage *currentCacheimage = [egocache imageForKey:@"cache_0"];
    UIImageView *imageView = [[UIImageView alloc] initWithImage:currentCacheimage];
    imageView.frame = CGRectMake(0, 0, 100, 100);
    [self.view addSubview:imageView];
    imageView.tag = 10010;
}
清除缓存原理
    //每次初始化EGOCache时遍历一下当前文件日期是否超过当前日期,如果超过删除文件
    NSTimeInterval now = [[NSDate date] timeIntervalSinceReferenceDate];
    NSMutableArray* removedKeys = [[NSMutableArray alloc] init];
    
    for(NSString* key in _cacheInfo) {
        if([_cacheInfo[key] timeIntervalSinceReferenceDate] <= now) {
            [[NSFileManager defaultManager] removeItemAtPath:cachePathForKey(_directory, key) error:NULL];
            [removedKeys addObject:key];
        }
    }
    
    [_cacheInfo removeObjectsForKeys:removedKeys];      
缓存记录的plist文件
在沙盒中的样子
源码下载

EGOCache源码

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,761评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,953评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,998评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,248评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,130评论 4 356
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,145评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,550评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,236评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,510评论 1 291
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,601评论 2 310
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,376评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,247评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,613评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,911评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,191评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,532评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,739评论 2 335

推荐阅读更多精彩内容

  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 11,947评论 4 60
  • 1. 今天在公司遇到一件让我特别生气的事。 事情的经过是这样的—— 近期要投一个非常重要的标,公司老总对此非常重视...
    零珑心阅读 518评论 1 14
  • 小胖 文静的小男孩 话不多 还害羞 喜欢用眼神与人交流 吃饭有点快 所以有点胖 小胖妈 淳朴又善良 也是不多言 喜...
    若水_086阅读 429评论 11 18
  • 身体是革命的本钱,拥有健康的体魄,才能追求更多的自由。要想养好身体,我们可以从饮食和运动入手。 饮食篇 快餐当然也...
    wukaili阅读 248评论 0 4
  • 终于在国庆节这天将刘奎龄的《花禽十二条屏》图之一完成了。从开始到结束拖拖拉拉十个来月。 这幅作品很多的第一次尝...
    爱手工的慧慧阅读 776评论 11 17