NSCache---详解
NSCache:
NSCache是苹果官方提供的缓存类,在AFNetworking中,使用它来进行图片缓存。
NSCache是线程安全的,在多线程操作中,不需要对Cache进行加锁,NSCache的key只是对对象的强引用,对象不需要实现NSCopying协议,NSCache也不会像NSDictionary一样复制对象。
NSCache的用法
NSCache在系统发出低内存通知时,会自动删除缓存。
例如当不断给NSCache填充数据时,应用内存会越来越大,当大小在500M左右时,系统抛出Received memory warning ,此时查看内存,发现内存会减少,因为NSCache在内存警报时,会自动删除缓存。NSCache可以设置数量限制和大小设置,countLimit设置数量限制的, totalCostLimit是设置大小的,不过平时基本不用,而且计算也麻烦。
设置代理
代码
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
//系统用来缓存的类
NSCache * cache = [[NSCache alloc] init];
//totalCostLimit 设置缓存大小
//设置缓存数量,清除的是先缓存的
cache.countLimit = 5;
cache.delegate = self;
for (NSInteger i = 0; i < 20; i ++) {
[cache setObject:[NSString stringWithFormat:@"cache - %@",@(i)] forKey:@(i)];
}
for (NSInteger i = 0; i < 20; i ++) {
NSLog(@"%@",[cache objectForKey:@(i)]);
}
}
代理
//谁不在缓存中
- (void)cache:(NSCache *)cache willEvictObject:(id)obj {
NSLog(@"%@",obj);
}