当前位置: 首页 > 工具软件 > TMCache > 使用案例 >

缓存工具TMCache调研

宁修永
2023-12-01
一、简介
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];
 类似资料: