一、简介
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 大致就是一个类似于Memcache的缓存服务器,用过的应该都大致了解它的执行过程,为了便于理解,我简单描述一下。 发送请求过程: 客户端(PHP/Java/C++) --> 缓存服务器 --> 内存(共享内存) 接收数据过程...
TMCache 是 Tumblr 公司开发的一个快速,无死锁的并行对象缓存,支持 iOS 和 OS X 系统。示例代码:UIImage *img = [[UIImage alloc] initWithData:data scale:[[UIScreen mainScreen] scale]];[[PINCache ...
只需要使用TBCache这个单例类来进行对象的缓存,当程序进入后台或者是收到MemoryWarning的时候,会把内存中的缓存全部移到磁盘上,不需要使用者操心。 TBCache适用的版本 适用于iOS 5.0及之后的版本。 TBCache相比于...
- **tmcache**:作者heiyeluren开发的项目,可能是一个针对特定场景优化的Memcached变体。 **5. 技巧与应用** - **缓存策略**:根据业务需求选择合适的缓存策略,例如预加载、热点数据优先缓存等。 - **容量规划**...
2. **缓存策略**:根据业务需求选择合适的缓存更新策略,如LRU(最近最少使用)、LFU(最不经常使用)等。 3. **数据分片**:对于大数据量,可以考虑将数据分片存储在多个Memcached实例上,提高并行处理能力。 4. **...
PINCache 是 Pinterest 公司开发的一个快速,无死锁的并行对象缓存,支持 iOS 和 OS X 系统, 是 TMCache 的改进版本。示例代码:UIImage *img = [[UIImage alloc] initWithData:data scale:[[UIScreen mainScreen] ...