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ù)。