前言:首先緩存分為內(nèi)存緩存跟硬盤緩存兩種,而內(nèi)存緩存的實現(xiàn)一般使用LRU算法來實現(xiàn),硬盤緩存要么基于文件要么基于數(shù)據(jù),要么結(jié)合文件緩存以及數(shù)據(jù)庫緩存兩種來實現(xiàn)介却。YYCache的內(nèi)存緩存實現(xiàn)是基于雙向鏈表來實現(xiàn)LRU算法,他的硬盤緩存是基于結(jié)合文件緩存以及數(shù)據(jù)庫兩者來實現(xiàn)的块茁。
1.YYCache的使用場景:存服務(wù)器傳過來的數(shù)據(jù)齿坷,以減少服務(wù)器的壓力,避免每次都向服務(wù)器請求。 緩存的方式分為兩種分別為內(nèi)存緩存和磁盤緩存,內(nèi)存緩存速度快容量小胃夏,磁盤緩存容量大速度慢可持久化存儲轴或。
2.YYCache相對與其他三方緩存策略的對比,參考官方的說明文檔
3.YYCache的使用:
#import <Foundation/Foundation.h>
@interface Pet : NSObject<NSCoding>
@property (nonatomic, copy) NSArray *petName;
@property (nonatomic, copy) NSString *petSex;
@end
#import "Pet.h"
@implementation Pet
- (void)encodeWithCoder:(NSCoder *)aCoder
{
[aCoder encodeObject:self.petName forKey:@"petName"];
[aCoder encodeObject:self.petSex forKey:@"petSex"];
}
- (nullable instancetype)initWithCoder:(NSCoder *)aDecoder
{
self.petName = [aDecoder decodeObjectForKey:@"petName"];
self.petSex = [aDecoder decodeObjectForKey:@"petSex"];
return self;
}
#import <Foundation/Foundation.h>
#import "Pet.h"
@interface Person : NSObject<NSCoding>
@property (nonatomic, copy) NSString *name;
@property (nonatomic, copy) NSString *sex;
@property (nonatomic, copy) NSString *age;
@property (nonatomic, strong) Pet *pet;
@end
#import "Person.h"
@implementation Person
- (void)encodeWithCoder:(NSCoder *)aCoder
{
[aCoder encodeObject:self.name forKey:@"name"];
[aCoder encodeObject:self.age forKey:@"age"];
[aCoder encodeObject:self.sex forKey:@"sex"];
[aCoder encodeObject:self.pet forKey:@"pet"];
}
- (instancetype)initWithCoder:(NSCoder *)aDecoder{
self.name = [aDecoder decodeObjectForKey:@"name"];
self.age = [aDecoder decodeObjectForKey:@"age"];
self.sex = [aDecoder decodeObjectForKey:@"sex"];
self.pet = [aDecoder decodeObjectForKey:@"pet"];
return self;
}
@end
開始使用YYCache緩存
#import "ViewController.h"
#import "YYCache.h"
#import "Person.h"
#import "Pet.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
YYCache *personCache = [YYCache cacheWithName:@"personCache"];
Person *person = [[Person alloc] init];
person.name = @"hxg";
person.age = @"11";
person.sex = @"女";
Pet *pet = [[Pet alloc] init];
pet.petName = @[@"111",@"222",@"33"];
pet.petSex = @"男";
person.pet = pet;
[personCache setObject:person
forKey:@"personInfo"];
NSLog(@"%@",[[(Person *)[personCache objectForKey:@"personInfo"] pet] petName]);
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *docDir = [paths objectAtIndex:0];
NSLog(@"%@",docDir);
}
然后到打印的目錄下去看生成的緩存文件如下:
屏幕快照 2017-11-02 上午1.09.16.png