NSCache

NSCache是什么?

  • NSCache是蘋果官方提供的緩存類,在AFNetWorking和SDWebImage等主流框架中被使用來(lái)管理緩存
  • 根據(jù)蘋果官方文檔的說(shuō)明:NSCache在系統(tǒng)內(nèi)存緊張(較低)時(shí),會(huì)自動(dòng)釋放對(duì)象(這個(gè)現(xiàn)象在模擬器中不會(huì)出現(xiàn))
    • 建議:接受到內(nèi)存警告的使用調(diào)用removeAllObject方法釋放對(duì)象
  • NSCache的Key只是對(duì)對(duì)象進(jìn)行Strong引用,不會(huì)拷貝,在清理的時(shí)候計(jì)算的是實(shí)際大小,不是引用的大小
  • NSCache是線程安全的,在多線程操作中,不需要對(duì)其加鎖

NSCache屬性


@property (copy) NSString *name;   //  名稱
@property (nullable, assign) id<NSCacheDelegate> delegate;  //  代理設(shè)置

@property NSUInteger totalCostLimit;    //  緩存空間的最大總成本,超出上限自動(dòng)回收對(duì)象,默認(rèn)為0,表示沒(méi)有限制(限制是不精/不嚴(yán)格的)
@property NSUInteger countLimit;    //  能夠緩存的對(duì)象最大數(shù)量,默認(rèn)為0,表示沒(méi)有限制(限制是不精/不嚴(yán)格的)
@property BOOL evictsObjectsWithDiscardedContent;  //  標(biāo)記緩存是否回收廢棄內(nèi)容


NSCache方法


//  根據(jù)指定key取出對(duì)象
- (nullable ObjectType)objectForKey:(KeyType)key;
//  在緩存中設(shè)置指定key名對(duì)應(yīng)的值,0成本
- (void)setObject:(ObjectType)obj forKey:(KeyType)key; // 0 cost
//  在緩存中設(shè)置指定key,并指定該key值對(duì)應(yīng)的成本,用于計(jì)算記錄在緩存中的所有對(duì)象的總成本
- (void)setObject:(ObjectType)obj forKey:(KeyType)key cost:(NSUInteger)g;

//  當(dāng)出現(xiàn)內(nèi)存警告或超出緩存總成本上限是,緩存會(huì)開啟一個(gè)回收過(guò)程,刪除部分元素
//  刪除緩存中指定key的對(duì)象
- (void)removeObjectForKey:(KeyType)key;
//  刪除緩存中所有的對(duì)象
- (void)removeAllObjects;

  • 代理方法

//  緩存將要?jiǎng)h除對(duì)象時(shí)調(diào)用,一般在開發(fā)是調(diào)試用(注:不能在此方法中修改緩存 )
- (void)cache:(NSCache *)cache willEvictObject:(id)obj;

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容