使用NSCache构建缓存,而非NSDictionary

字数 150阅读 443

在开发Mac OS X或iOS时,从因特网下载的图片该如何缓存,一般想到的是将内存中的图片保存在字典(NSDictionary)里,稍后使用。其实,NSCache更好,它是Foundation框架为处理这类任务专门设计的。

NSCache 比 NSDictionary胜任原因??

  • 当系统资源将要耗尽时,NSCache可以自动删减缓存
  • NSCache并不会拷贝键,而是会保留它。不会拷贝键的原因:键是由不支持拷贝操作的对象充当。
  • NSCache是线程安全的
#import "CYYClass.h"

@interface CYYClass ()
{
    NSCache *_cache;
}
@end

@implementation CYYClass

- (instancetype)init
{
    self = [super init];
    if (self) {
        _cache = [[NSCache alloc] init];
        _cache.countLimit = 100;
        _cache.totalCostLimit = 5 * 1024 * 1024;
    }
    return self;
}

- (void)downloadWithURL:(NSURL *)url
{
    NSPurgeableData *cacheData = [_cache objectForKey:url];
    if (cacheData) {
        [cacheData beginContentAccess];
        
        [self useData:cacheData];
        
        [cacheData endContentAccess];
    }else{
        //network init
        //network block -->data
        {
            NSPurgeableData *purgeableData = [[NSPurgeableData alloc] initWithData:data];
            [_cache setObject:purgeableData forKey:url cost:purgeableData.length];
            
            [self useData:cacheData];
            
            [purgeableData endContentAccess];
        }
    }
}

- (void)useData:(NSPurgeableData *)data {}

@end

推荐阅读更多精彩内容