TMCaChe缓存框架使用
一、简介
TMCache是用于存储临时持久化对象的开源iOS/OS key/value缓存类库,减少重复创建像下载数据、缓慢的处理结果这样的昂贵性能花销。
TMCache由两个本身相似的存储组成,
TMMemoryCache,存在于内存中
TMDiskCache,存在于硬盘中
它们都支持GCD和从多线程中读取数据。
使用内存缓存(TMMemoryCache),当App收到内存使用警告或者App被移到后台时(也就是打开了其他App),TMCache 会自动清理内存里面的缓存数据。
当使用硬盘缓存(TMDiskCache)时, 需要开发者手动去清理缓存或者事先设置缓存区容量或者缓存期限。
二、简单的示例代码
UIImage *img = [[UIImage alloc] initWithData:data scale:[[UIScreen mainScreen] scale]];
[[PINCache sharedCache] setObject:img forKey:@"image" block:nil]; // returns immediately
[[PINCache sharedCache] objectForKey:@"image"
block:^(PINCache *cache, NSString *key, id object) {
UIImage *image = (UIImage *)object;
NSLog(@"image scale: %f", image.scale);
}];
三、属性和方法
总览
有一个统一的回调block
属性全部只读
存取操作方法分两套,一套不阻塞线程,立即返回,有空闲线程资源时生效(带block),另一套不立即返回,阻塞线程直至生效(不带block)
详细
1、回调block
(^TMCacheObjectBlock)(TMCache *cache, NSString *key, id object);
提供三个参数:缓存实例、键、值,可在block中操作或得到的缓存实例或键值对
2、 name
缓存标识名
3、queue
并行读操作所用的线程队列
4、 diskByteCount
占用存储大小
5、 diskCache
持久化缓存实例
6、 memoryCache
内存缓存实例
7、初始化方法
- (instancetype)initWithName:(NSString *)name;
- (instancetype)initWithName:(NSString *)name rootPath:(NSString *)rootPath;
- (instancetype)initWithName:(NSString *)name memoryCapacity:(NSUInteger)memoryCapacity diskCapacity:(NSUInteger)diskCapacity;
8、存方法
- (void)setObject:(id <NSCoding>)object forKey:(NSString *)key;
- (void)setObject:(id <NSCoding>)object forKey:(NSString *)key block:(TMCacheObjectBlock)block;
9、取方法
- (id)objectForKey:(NSString *)key;
- (void)objectForKey:(NSString *)key block:(TMCacheObjectBlock)block;
10、删除
- (void)removeObjectForKey:(NSString *)key;
- (void)removeObjectForKey:(NSString *)key block:(TMCacheObjectBlock)block;
- (void)removeAllObjects;
11、定时清理
- (void)trimToDate:(NSDate *)date;
- (void)trimToDate:(NSDate *)date block:(TMCacheBlock)block;
_docRef = (__bridge CGPDFDocumentRef)([self.pdfCache objectForKey:urlKey]);
if(!_docRef)
{
_docRef = @"adaweqweqweqwadaweqweqweqw";
[self.pdfCache setObject:(__bridge id<NSCoding>)(_docRef) forKey:urlKey];
}
- (TMCache *)pdfCache
{
if(!_pdfCache)
{
_pdfCache = [TMCache sharedCache];
_pdfCache.memoryCache.costLimit = 1024*1024*20;
}
return _pdfCache;
}
// NSString *caches = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];
// // response.suggestedFilename : 建议使用的文件名,一般跟服务器端的文件名一致
// NSString *file = [caches stringByAppendingPathComponent:downloadTask.response.suggestedFilename];
//
// // 将临时文件剪切或者复制Caches文件夹
// NSFileManager *mgr = [NSFileManager defaultManager];
//
// // AtPath : 剪切前的文件路径
// // ToPath : 剪切后的文件路径
// [mgr moveItemAtPath:location.path toPath:file error:nil];
————————————————————————————————————————————————
推荐阅读
-
Laravel框架执行原生SQL语句及使用paginate分页的方法
-
Laravel框架使用monolog_mysql实现将系统日志信息保存到mysql数据库的方法
-
Yii框架使用PHPExcel导出Excel文件的方法分析【改进版】
-
Yii框架中使用PHPExcel的方法分析
-
Yii Framework框架使用PHPExcel组件的方法示例
-
yii框架使用分页的方法分析
-
thinkPHP5.1框架使用SemanticUI实现分页功能示例
-
使用composer 安装 laravel框架的方法图文详解
-
Mybaits 源码解析 (十)----- 全网最详细,没有之一:Spring-Mybatis框架使用与源码解析
-
yii2.0框架场景的简单使用示例