NSCache是一个类似于集合的容器,即缓存。它存储key-value对,这一点类似于NSDictionary类。
利用他可以解决一些内存紧张导致的问题。
AFN,SDWebImage都是用NSCache来解决缓存问题
NSCache 不Copy Key
NSDictionary
NSCache的key 没有遵循协议
- (void)setObject:(ObjectType)anObject forKey:(KeyType <NSCopying>)aKey;NSCache
- (void)setObject:(ObjectType)obj forKey:(KeyType)key; // 0 costNSCache 线程安全
- NSCache是线程安全的,我们可以在不同的线程中添加、删除和查询缓存中的对象,而不需要锁定缓存区域。
NSCache 自动删除
- 默认500MB内存限制
- countLimit:数量限制
- totalCostLimit:cost限制(cost对象占用的字节数)
countLimit,totalCostLimit是不精确的
- evictsObjectsWithDiscardedContent 缓存是否自动废弃内容已经被废弃的对象
evictsObjectsWithDiscardedContent 和 来控制对象是否会被自动移除的机制,但是这可能只会让你碰到更多的问题。
NSCacheDelegate
@optional
- (void)cache:(NSCache *)cache willEvictObject:(id)obj;例子
Example:
NSCache *cache = [[NSCache alloc] init];
cache.delegate = self;
cache.countLimit = 10;
NSURL *url = [[NSBundle mainBundle] URLForResource:@"1" withExtension:@"pdf"];
for (int i = 0; i < 10000000; i++) {
NSData *data = [NSData dataWithContentsOfURL:url];
[cache setObject:data forKey:[NSString stringWithFormat:@"%d",i]];
}你会发现内存占用一只在200MB维持,无论我们存储了多少对象。
打个广告嘿嘿
最近写了个开源图表框架
github.com/JunyiXie/XJ…
觉得不错的话可以给我个star
当然也欢迎issue!
代码贡献!