欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

TMCaChe缓存框架使用

程序员文章站 2022-03-03 12:49:30
...

一、简介

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];

————————————————————————————————————————————————