在iOS开发中经常需要用到NSCache做缓存。比如做一个相册浏览器,如果一直从内存中读取大量数据就会很影响性能,如果在缓存中将已经看的图片存进去,下次需要的时候先去从缓存中获取,如果没有再从内存中读取
#define kCacheTotalCostLimit 10*1024*1024 // 设置缓存区域大小为10M
NSCache 的实现方式和NSMutabledictionary 有点类似
NSCache*cache = [[NSCache alloc] init];
cache.totalCostLimit = kCacheTotalCostLimit;
// cache.countLimit = 30; 设置缓存条数30条
[cache setObject:@“要缓存的对象,可以是image” forKey:@“可以用图片的url或者名称作为key值”]; // 向缓存中写数据
在需要使用图片的地方
UIImage *image = [cache objectForKey:@“刚才设置的key值”];
if(image == nil)
{
image = [UIImage imageWithContentsOfFile:@“图片地址”]; // 如果缓存中没有图片就去图片位置去获取一次,下次只要缓存没有清除就不需要再去获取了
}
NSCache 的委托 NSCacheDelegate,如果需要对即将删除的对象做其他操作时可以在下面这个方法里实现
-(void)cache:(NSCache *)cache willEvictObject:(id)obj
{
// 操作即将删除的缓存内容
}