利用NSCache提升效率
2014-05-04 19:18
169 查看
http://www.ganlvji.com/nscache/
在ios中,苹果提供了,NSCache类和NSDictionary很相似,提供key,value的存储,不一样的是NSCache在内存吃紧的时候会做自动释放。
遇到一个问题是,在使用大量图片的app中,需要从存储里面读取数据,每次都从文件系统里面读取文件会造成卡顿现象。
解决办法就是把NSData对象缓存起来,先从NSCache里面读取数据,然后再从文件系统获取数据,提高效率。
方法如下:
步骤1:需要一个单例的NSCache,由于我们的FileUtil本来就是单例的,所以只是需要在初始化FileUtil的时候实例出一个NSCache就行了。
步骤2:写文件的时候,把NSData存入NSCache里面
步骤3:读文件时候,先从NSCache里面读取,如果没有再从文件系统中读取。从文件系统中读取到的数据,再放回到NSCache中。
总结:通过这样的方式,形成了 内存 -> 文件系统 -> 网络图片 的三级图片访问系统。
在ios中,苹果提供了,NSCache类和NSDictionary很相似,提供key,value的存储,不一样的是NSCache在内存吃紧的时候会做自动释放。
遇到一个问题是,在使用大量图片的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; } }
总结:通过这样的方式,形成了 内存 -> 文件系统 -> 网络图片 的三级图片访问系统。
相关文章推荐
- 利用NSCache提升效率
- 利用NSCache提升效率
- 利用NSCache提升效率
- 利用NSCache提升效率
- 利用NSCache提升效率
- 利用NSCache提升效率
- 利用NSCache提升效率
- 利用NSCache提升效率
- 利用NSCache提升效率
- 利用NSCache提升效率
- 【iOS】利用NSCache提升效率
- JavaScript 利用StringBuffer类提升+=拼接字符串效率
- C语言Register关键字:利用寄存器提升访问效率
- 利用easy_install 工作效率提升起来
- 利用 AWK 的数值计算功能提升工作效率
- 利用 AWK 的数值计算功能提升工作效率
- C++修炼笔记----------利用合并排序提升排序效率(分而治之---Divide-Conquer )
- 利用jenkins实现自动构建、部署,提升团队开发效率
- 利用 AWK 的数值计算功能提升工作效率
- 利用命令行提升Windows Server 2008管理效率