在開發(fā)Mac OS X或iOS時,從因特網(wǎng)下載的圖片該如何緩存,一般想到的是將內(nèi)存中的圖片保存在字典(NSDictionary)里,稍后使用。其實,NSCache更好,它是Foundation框架為處理這類任務(wù)專門設(shè)計的。
NSCache 比 NSDictionary勝任原因??
- 當(dāng)系統(tǒng)資源將要耗盡時,NSCache可以自動刪減緩存
- NSCache并不會拷貝鍵,而是會保留它。不會拷貝鍵的原因:鍵是由不支持拷貝操作的對象充當(dāng)。
- 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