使用NSCache構(gòu)建緩存,而非NSDictionary

在開發(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
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容