YYCache基础用法
开发中涉及数据持久化方面也挺多的,方法也很多,列如sqlite,归档,userdefalut单列,plist存储,苹果自带core data,亦或是基于sqlite封装的三方库(FMDB)都是可以实现需求的。到底喜欢哪一种,就凭习惯了。这里我要讲的是另外一种数据存储YYCache,使用起来也非常方便,而且可以控制存储数量,在合适的时候替换比较旧的数据。是不是有点熟悉了,对,就是采用的LRU算法,可以根据需求保存到一定数据,就是覆盖以前比较旧的数据。
YYCache底层是链表结构,刚才说的LRU就是删除链表的尾部,直到满足条件。直接上干货
NSArray *saveLocationDataArrays = @[@{@"name":@"dd"}];
//相当于创建一个名字为dataBase的数据库,存在的时候不创建,不存在的时候才会创建
YYCache *myCache = [YYCache cacheWithName:@"dataBase"];
//通过key去去保存数据,相对于一个map,保存的值不重复且是最新的
//同步方式
[myCache setObject:saveLocationDataArrays forKey:@"key"];
//保存值异步方式
CFAbsoluteTime starTime = CFAbsoluteTimeGetCurrent();
[myCache setObject:saveLocationDataArrays forKey:@"key" withBlock:^{
CFAbsoluteTime ednTime = CFAbsoluteTimeGetCurrent();
NSLog(@"异步保存数据时间:%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);
}];
//删除存储map中对应key的值
[myCache removeObjectForKey:@"key"];
//删除全部对象
[myCache removeAllObjects];
除此之外,效率也非常高的,可以看出保存时间仅仅0.000382s
15:13:28.715760+0800 test2[9793:443132] 异步保存数据时间:0.000382
YYWebImage基础用法
YYWebImage用法跟SDwebImage用法类似,最基本用法,它底层用 YYCache 实现了内存和磁盘缓存, 用 YYImage 实现了 WebP/APNG/GIF 动图的解码和播放,异步的图片加载,支持 HTTP 和本地文件。
支持 GIF、APNG、WebP 动画(动态缓存,低内存占用)。
支持逐行扫描、隔行扫描、渐进式图像加载。
UIImageView、UIButton、MKAnnotationView、CALayer 的 Category 方法支持。
常见图片处理:模糊、圆角、大小调整、裁切、旋转、色调等。
高性能的内存和磁盘缓存。
高性能的图片设置方式,以避免主线程阻塞。
每个类和方法都有完善的文档注释。
//基础用法
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#>];