在开发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
网友评论