开源框架学习-1-EGOCache

项目地址  https://github.com/enormego/EGOCache/


EGOCache是一个轻量级的缓存框架。用法简单方便,在现在的项目中,我就用到EGOCache来缓存下载过的照片和字符串,还能设置这些存储值的有效时间。


简单用法


NSString* saveString=@"xxx";

[[EGOCacheglobalCache]setString:saveStringforKey:@"xxx"withTimeoutInterval:24*60*60];

NSString* xxx=[[EGOCacheglobalCache]stringForKey:@"xxx"];

NSLog(@"xxx=%@",xxx);


学习笔记


1. 对于一些常用的代码片段可以使用宏定义,减少冗余代码


#if DEBUG

#define CHECK_FOR_EGOCACHE_PLIST() if([key isEqualToString:@"EGOCache.plist"]) { \

NSLog(@"EGOCache.plist is a reserved key and can not be modified."); \

return; }

#else

#define CHECK_FOR_EGOCACHE_PLIST() if([key isEqualToString:@"EGOCache.plist"]) return;

#endif

2.内联函数的使用, 消除函数调用时的时间开销 ,同事代码也比较简洁


static  inline  NSString* cachePathForKey(NSString* directory,NSString* key) {

key = [keystringByReplacingOccurrencesOfString:@"/"withString:@"_"];

return[directorystringByAppendingPathComponent:key];

}

3.文中大量使用了GCD技术,这里不详细介绍GCD,请大家参考一本PDF教程

下载地址    http://download.csdn.net/detail/dongsh315/7240711 

4.单例模板

+ (instancetype)globalCache {

static id instance;

static dispatch_once_t onceToken;

dispatch_once(&onceToken, ^{

instance = [[[self class] alloc] init];

});a

return instance;

}

5. 在删除文件时避免要删的文件和存储本地的文件重名


- (void)removeCacheForKey:(NSString*)key {

CHECK_FOR_EGOCACHE_PLIST();   //巧妙之处

dispatch_async(_diskQueue, ^{

[[NSFileManager defaultManager] removeItemAtPath:cachePathForKey(_directory, key) error:NULL];

});

[self setCacheTimeoutInterval:0 forKey:key];

}

6.这里是设置 _frozenCacheInfoQueue  _cacheInfoQueue  两个变量的原因 , 两个都是用来保存键值对的字典 ,比较文中的代码发现,  代码很相似 , 区别是  _cacheInfoQueue 多了 self.frozenCacheInfo= [_cacheInfocopy]; 和 [selfsetNeedsSave];  从注释中就可以看出 _frozenCacheInfo 是为了快速读出新值的需要  而 _cacheInfocopy是为了保存写入文件的需要 _cacheInfocopy滞后一些 。


开源框架学习-1-EGOCache_第1张图片

7. 存储值的有效时间思路

存储时把时间存下来就好了 下次读出时如果时间比当前时间小说明 失效

你可能感兴趣的:(开源框架学习-1-EGOCache)