📒我们应该使用的NSCache

NSCache是苹果官方提供的缓存类,它的用法 NSMutableDictionary的用法很相似,NSCache使用率很广,例如在 AFNetworking 和 SDWebImage 中均使用NSCache来管理缓存。还有一个好处就是NSCache在系统内存很低时候会自动释放一些缓存内容,无需人工干预。同时NSCache还是线程安全的,在多线程中无需对NSCache进行加锁。另外NSCache的key只是做强引用,无需实现NSCopying协议。

NSCache也被设计来融合对象遵从,其中最常见的类型是NSPurgeableData,通过调用beginContentAccess 与 endContentAccess,你可以控制何时安全放弃这个对象。这不仅在你的应用运行时提供自动缓存管理,它甚至有助于你的应用被暂停。通常情况下,当内存紧张时,内存警告没有释放出足够的内存,iOS会开始杀死暂停在后台的应用。在这种情形下,你的应用没有得到delegate信息,就这样被杀死。不过如果你使用NSPurgeableData,iOS会释放这块内存给你,即使你的应用被暂停。

属性:

@property NSUInteger totalCostLimit;// limits are imprecise/not strict,缓存空间的最大总成本,超出上限会自动回收对象 默认值是 0,表示没有限制。

@property NSUInteger countLimit;// limits are imprecise/not strict,能够缓存对象的最大数量,默认值是 0,表示没有限制。

@property BOOL evictsObjectsWithDiscardedContent;//标示缓存是否回收废弃的内容,默认值是 YES,表示自动回收.

方法:

- (void)removeObjectForKey:(id)key;//删除缓存中,指定键名的对象。

- (void)removeAllObjects;//删除缓存中所有对象。
 

NSCacheDelegate

- (void)cache:(NSCache *)cache willEvictObject:(id)obj;//缓存将要删除对象时调用,不能在此方法中修改缓存。

代码示例:

NSCache *cache = [[NSCache alloc] init];
cache.delegate = self;
cache.countLimit = 5;//最大缓存5条

for (int i=0; i < 10; i++) {
    NSString *key = [NSString stringWithFormat:@"key_%d",i];
    NSString *value = [NSString stringWithFormat:@"value_%d",i];
    [cache setObject:value forKey:key];
}

for (int i=0; i < 10; i++) {
    NSString *key = [NSString stringWithFormat:@"key_%d",i];
    NSString *value = [cache objectForKey:key];
    NSLog(@"key_%d : %@",i,value);
}

log信息:

2015-08-12 21:58:00.748 AwnlabDemo[1029:33713] willEvictObject = value_0

2015-08-12 21:58:00.748 AwnlabDemo[1029:33713] willEvictObject = value_1

2015-08-12 21:58:00.749 AwnlabDemo[1029:33713] willEvictObject = value_2

2015-08-12 21:58:00.749 AwnlabDemo[1029:33713] willEvictObject = value_3

2015-08-12 21:58:00.749 AwnlabDemo[1029:33713] willEvictObject = value_4

2015-08-12 21:58:00.749 AwnlabDemo[1029:33713] key_0 : (null)

2015-08-12 21:58:00.749 AwnlabDemo[1029:33713] key_1 : (null)

2015-08-12 21:58:00.749 AwnlabDemo[1029:33713] key_2 : (null)

2015-08-12 21:58:00.749 AwnlabDemo[1029:33713] key_3 : (null)

2015-08-12 21:58:00.749 AwnlabDemo[1029:33713] key_4 : (null)

2015-08-12 21:58:00.749 AwnlabDemo[1029:33713] key_5 : value_5

2015-08-12 21:58:00.749 AwnlabDemo[1029:33713] key_6 : value_6

2015-08-12 21:58:00.749 AwnlabDemo[1029:33713] key_7 : value_7

2015-08-12 21:58:00.749 AwnlabDemo[1029:33713] key_8 : value_8

2015-08-12 21:58:00.749 AwnlabDemo[1029:33713] key_9 : value_9

延伸阅读:http://nshipster.cn/nscache/


📢原创文章📢
未经授权不得转载或转载请注明出处
本文地址: https://www.zhaoxiangguang.cn/note/ios/335.html

为您推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注