`

TMCaChe缓存框架使用

    博客分类:
  • ios
 
阅读更多

一、简介

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

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

分享到:
评论

相关推荐

    tmcache 缓存服务器

    tmcache 大致就是一个类似于Memcache的缓存服务器,用过的应该都大致了解它的执行过程,为了便于理解,我简单描述一下。 发送请求过程: 客户端(PHP/Java/C++) --&gt; 缓存服务器 --&gt; 内存(共享内存) 接收数据过程...

    并行对象缓存TMCache.zip

    TMCache 是 Tumblr 公司开发的一个快速,无死锁的并行对象缓存,支持 iOS 和 OS X 系统。示例代码:UIImage *img = [[UIImage alloc] initWithData:data scale:[[UIScreen mainScreen] scale]];[[PINCache ...

    TBCache:Teambition的简单缓存(受TMCache启发)

    只需要使用TBCache这个单例类来进行对象的缓存,当程序进入后台或者是收到MemoryWarning的时候,会把内存中的缓存全部移到磁盘上,不需要使用者操心。 TBCache适用的版本 适用于iOS 5.0及之后的版本。 TBCache相比于...

    Memcached_原理和使用详解

    - **tmcache**:作者heiyeluren开发的项目,可能是一个针对特定场景优化的Memcached变体。 **5. 技巧与应用** - **缓存策略**:根据业务需求选择合适的缓存策略,例如预加载、热点数据优先缓存等。 - **容量规划**...

    Memcached 原理和使用详解

    2. **缓存策略**:根据业务需求选择合适的缓存更新策略,如LRU(最近最少使用)、LFU(最不经常使用)等。 3. **数据分片**:对于大数据量,可以考虑将数据分片存储在多个Memcached实例上,提高并行处理能力。 4. **...

    并行对象缓存PINCache.zip

    PINCache 是 Pinterest 公司开发的一个快速,无死锁的并行对象缓存,支持 iOS 和 OS X 系统, 是 TMCache 的改进版本。示例代码:UIImage *img = [[UIImage alloc] initWithData:data scale:[[UIScreen mainScreen] ...

Global site tag (gtag.js) - Google Analytics