您的位置:首页 > 其它

利用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就行了。
_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;

}

}


总结:通过这样的方式,形成了 内存 -> 文件系统  -> 网络图片 的三级图片访问系统。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: