利用NSCache提升效率

转载 2015年11月18日 14:09:34

简介:

在ios中,苹果提供了,NSCache类和NSDictionary很相似,提供key,value的存储,不一样的是NSCache在内存吃紧的时候会做自动释放。

不过在模拟器中模拟内存警告时,缓存不会做清理动作 为了确保接收到内存警告时能够真正释放内存,最好调用一下 removeAllObjects 方法

NSCache 是线程安全的,在多线程操作中,不需要对 Cache 加锁

NSCache 的 Key 只是做强引用,不需要实现 NSCopying 协议

setObject:forKey:cost:
在缓存中设置指定键名对应的值,并且指定该键值对的成本 成本 (cost) 用于计算记录在缓冲中的所有对象的总成本
置对象并指定”成本”,成本可以自行指定

啥叫成本?

例子:缓存图片 缓存 100 张图片 将图片的”宽 * 高”当作成本,图像”像素” 10M 当作缓存成本,无论缓存的多少张照片,只要像素值超过 10M,就自动清理 缓存图像的时候,使用成本,比单纯设置数量要科学!

(void)setObject:(id)obj forKey:(id)key cost:(NSUInteger)g;

当出现内存警告时,或者超出缓存的总成本上限时,缓存会开启一个回收过程,删除部分元素


例子:

遇到一个问题是,在使用大量图片的app中,需要从存储里面读取数据,每次都从文件系统里面读取文件会造成卡顿现象。

解决办法就是把NSData对象缓存起来,先从NSCache里面读取数据,然后再从文件系统获取数据,提高效率。

方法如下:

步骤1:需要一个单例的NSCache,由于我们的FileUtil本来就是单例的,所以只是需要在初始化FileUtil的时候实例出一个NSCache就行了。

_cache = [[NSCache alloc] init];

步骤2:写文件的时候,把NSData存入NSCache里面

-(void)write:(NSData*)data forKey:(NSString*)key

{

NSString *filepath  = [self filePathForKey:key];

[_cache setObject:data forKey:key];

dispatch_async(fileQueue, ^{

[[NSFileManager defaultManager] createFileAtPath:filepath contents:data attributes:nil];

});

}

步骤3:读文件时候,先从NSCache里面读取,如果没有再从文件系统中读取。从文件系统中读取到的数据,再放回到NSCache中。

-(NSData*)readForKey:(NSString*)key

{

if(key==nil){

return nil;

}

NSData *cacheData = [_cache objectForKey:key];

if(cacheData){

NSLog(@"get data from cache");

return cacheData;

}else{

NSLog(@"miss data from cache");

NSString *filepath =[self filePathForKey:key];

NSData *fileData =  [[NSFileManager defaultManager] contentsAtPath:filepath];

if(fileData){

[_cache setObject:fileData forKey:key];

}

return fileData;

}

}

总结:通过这样的方式,形成了 内存 -> 文件系统  -> 网络图片 的三级图片访问系统。

相关文章推荐

Arimo利用Alluxio的内存能力提升深度学习模型的结果效率(Time-to-Result)

深度学习算法通常被一些具体应用所采用,其中比较显著的应用领域包括计算机视觉、机器翻译、文本挖掘、欺诈检测等。深度学习的方法在大模型加大数据的场景下效果显著。

利用 AWK 的数值计算功能提升工作效率

Awk 是一种优秀的文本样式扫描和处理工具。 Awk 与 sed 和 grep 有些相似, 但功能比后者强不少。 awk 提供的功能包括样式载入, 流控制,数学运算符,进程控制以及许多内置的变量和函数...

iOS开发之缓存框架、内存缓存、磁盘缓存、NSCache、TMMemoryCache、PINMemoryCache、YYMemoryCache、TMDiskCache、PINDiskCache

1.在项目中我们难免会用到一些缓存方式来保存服务器传过来的数据,以减少服务器的压力。 缓存的方式分为两种分别为内存缓存和磁盘缓存,内存缓存速度快容量小,磁盘缓存容量大速度慢可持久化。常见的内存缓存有N...

SCOPUS提升科研效率

  • 2014-09-02 11:45
  • 8.05MB
  • 下载

NSCache

可怜的 NSCache 一直处于 NSMutableDictionary 的阴影之下。就好像没有人知道它提供了垃圾处理的功能,而开发者们却费劲力气地去自己实现它。 没错,NSCache 基本上就是一...

NSCache

NSCache是系统提供的一种类似于集合(NSMutableDictionary)的缓存,它与集合的不同如下: 1. NSCache具有自动删除的功能,以减少系统占用的内存; 2. NSC...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)