YYCache基礎(chǔ)用法
開發(fā)中涉及數(shù)據(jù)持久化方面也挺多的荐类,方法也很多,列如sqlite,歸檔,userdefalut單列,plist存儲(chǔ)茁帽,蘋果自帶core data玉罐,亦或是基于sqlite封裝的三方庫(kù)(FMDB)都是可以實(shí)現(xiàn)需求的。到底喜歡哪一種潘拨,就憑習(xí)慣了吊输。這里我要講的是另外一種數(shù)據(jù)存儲(chǔ)YYCache,使用起來也非常方便铁追,而且可以控制存儲(chǔ)數(shù)量季蚂,在合適的時(shí)候替換比較舊的數(shù)據(jù)。是不是有點(diǎn)熟悉了琅束,對(duì)扭屁,就是采用的LRU算法,可以根據(jù)需求保存到一定數(shù)據(jù)涩禀,就是覆蓋以前比較舊的數(shù)據(jù)料滥。
YYCache底層是鏈表結(jié)構(gòu),剛才說的LRU就是刪除鏈表的尾部艾船,直到滿足條件葵腹。直接上干貨
NSArray *saveLocationDataArrays = @[@{@"name":@"dd"}];
//相當(dāng)于創(chuàng)建一個(gè)名字為dataBase的數(shù)據(jù)庫(kù),存在的時(shí)候不創(chuàng)建丽声,不存在的時(shí)候才會(huì)創(chuàng)建
YYCache *myCache = [YYCache cacheWithName:@"dataBase"];
//通過key去去保存數(shù)據(jù),相對(duì)于一個(gè)map觉义,保存的值不重復(fù)且是最新的
//同步方式
[myCache setObject:saveLocationDataArrays forKey:@"key"];
//保存值異步方式
CFAbsoluteTime starTime = CFAbsoluteTimeGetCurrent();
[myCache setObject:saveLocationDataArrays forKey:@"key" withBlock:^{
CFAbsoluteTime ednTime = CFAbsoluteTimeGetCurrent();
NSLog(@"異步保存數(shù)據(jù)時(shí)間:%f",ednTime - starTime);
}];
//同步判斷
BOOL success = [myCache containsObjectForKey:@"key"];
if (!success) {
return;
}
//異步判斷
[myCache containsObjectForKey:@"key" withBlock:^(NSString * _Nonnull key, BOOL contains) {
NSLog(@"%@%d",key,contains);
}];
//同步取值
id value = [myCache objectForKey:@"key"];
NSLog(@"%@",value);
//異步取值
[myCache objectForKey:@"key" withBlock:^(NSString * _Nonnull key, id<NSCoding> _Nonnull object) {
NSLog(@"%@-%@",key,object);
}];
//刪除存儲(chǔ)map中對(duì)應(yīng)key的值
[myCache removeObjectForKey:@"key"];
//刪除全部對(duì)象
[myCache removeAllObjects];
除此之外雁社,效率也非常高的,可以看出保存時(shí)間僅僅0.000382s
15:13:28.715760+0800 test2[9793:443132] 異步保存數(shù)據(jù)時(shí)間:0.000382
YYWebImage基礎(chǔ)用法
YYWebImage用法跟SDwebImage用法類似,最基本用法,它底層用 YYCache 實(shí)現(xiàn)了內(nèi)存和磁盤緩存, 用 YYImage 實(shí)現(xiàn)了 WebP/APNG/GIF 動(dòng)圖的解碼和播放,異步的圖片加載,支持 HTTP 和本地文件晒骇。
支持 GIF霉撵、APNG、WebP 動(dòng)畫(動(dòng)態(tài)緩存洪囤,低內(nèi)存占用)徒坡。
支持逐行掃描、隔行掃描瘤缩、漸進(jìn)式圖像加載喇完。
UIImageView、UIButton剥啤、MKAnnotationView锦溪、CALayer 的 Category 方法支持不脯。
常見圖片處理:模糊、圓角刻诊、大小調(diào)整防楷、裁切、旋轉(zhuǎn)则涯、色調(diào)等复局。
高性能的內(nèi)存和磁盤緩存。
高性能的圖片設(shè)置方式粟判,以避免主線程阻塞亿昏。
每個(gè)類和方法都有完善的文檔注釋。
//基礎(chǔ)用法
UIImageView *imageView = nil;
[imageView setImageWithURL:[NSURL URLWithString:@""] placeholder:[UIImage imageNamed:@"xx.png"]];
//其他用法
[imageView setImageWithURL:<#(nullable NSURL *)#> options:<#(YYWebImageOptions)#>];
[imageView setImageWithURL:<#(nullable NSURL *)#> placeholder:<#(nullable UIImage *)#> options:<#(YYWebImageOptions)#> completion:<#^(UIImage * _Nullable image, NSURL * _Nonnull url, YYWebImageFromType from, YYWebImageStage stage, NSError * _Nullable error)completion#>];
[imageView setImageWithURL:<#(nullable NSURL *)#> placeholder:<#(nullable UIImage *)#> options:<#(YYWebImageOptions)#> manager:<#(nullable YYWebImageManager *)#> progress:<#^(NSInteger receivedSize, NSInteger expectedSize)progress#> transform:<#^UIImage * _Nullable(UIImage * _Nonnull image, NSURL * _Nonnull url)transform#> completion:<#^(UIImage * _Nullable image, NSURL * _Nonnull url, YYWebImageFromType from, YYWebImageStage stage, NSError * _Nullable error)completion#>];