如何使用YYCache存储自定义对象
2017-11-01 16:21
661 查看
YYCache是一个缓存框架,由YYCache、YYDiskCache、YYMemoryCache和YYKVStorage组成。在项目开发过程中,想通过YYCache存储一个自定义对象,这个对象包括文章的ID、标题、图片、作者。但是在存储的过程中发现,YYCache并不能将此对象成功存储到本地,查看API后发现,如果保存的自定义对象不遵守NSCoding的协议或不实现NSCoding协议的方法,就不能使用YYDiskCache进行长期缓存。
也就是说通过YYCache存储自定义对象的时候,需要对该自定义对象先进行归档与反归档的操作,这样才能将其成功存储到本地。
通过YYCache实现存储自定义对象的步骤:
一、创建自定义对象ArticleCacheModel,包括属性文章的ID、标题、图片、作者,同时遵循协议
二、对自定义对象做归档与反归档的操作
归档(序列化)
反归档(反序列化)
三、将自定义的对象用YYCache储存到本地
通过key取本地值
也就是说通过YYCache存储自定义对象的时候,需要对该自定义对象先进行归档与反归档的操作,这样才能将其成功存储到本地。
通过YYCache实现存储自定义对象的步骤:
一、创建自定义对象ArticleCacheModel,包括属性文章的ID、标题、图片、作者,同时遵循协议
@interface ArticleCacheModel: NSObject <NSCoding> + (instancetype)shareInstace; @property(nonatomic, copy)NSString *articleTitle; @property(nonatomic, copy)NSString *imageUrl; @property(nonatomic, copy)NSString *authorName; @property(nonatomic, assign)NSInteger articleID; @end
二、对自定义对象做归档与反归档的操作
归档(序列化)
- (void)encodeWithCoder:(NSCoder *)aCoder { [aCoder encodeInteger:self.articleID forKey:@"articleID"]; [aCoder encodeObject:self.authorName forKey:@"authorName"]; [aCoder encodeObject:self.articleTitle forKey:@"articleTitle"]; [aCoder encodeObject:self.imageUrl forKey:@"imageUrl"]; }
反归档(反序列化)
- (instancetype)initWithCoder:(NSCoder *)aDecoder { self.articleID = [aDecoder decodeIntForKey:@"articleID"]; self.authorName = [aDecoder decodeObjectForKey:@"authorName"]; self.articleTitle = [aDecoder decodeObjectForKey:@"articleTitle"]; self.imageUrl = [aDecoder decodeObjectForKey:@"imageUrl"]; return self; }
三、将自定义的对象用YYCache储存到本地
YYCache *_dataCache =[[YYCache alloc] initWithName:@"ArticleCache"]; _dataCache.memoryCache.shouldRemoveAllObjectsOnMemoryWarning=YES; ArticleCacheModel *cacheModel = [ArticleCacheModel shareInstace]; cacheModel.articleID = @”文章ID”; cacheModel.articleTitle = @”文章标题”; cacheModel.imageUrl = @”图片地址”; cacheModel.authorName = @”作者名字”; //存储到本地 [_dataCache setObject: cacheModel forKey:@“cacheModelKey”];
通过key取本地值
ArticleCacheModel *cacheModel = [YYCache objectForKey: @“cacheModelKey”]; NSLog(@”%@”,cacheModel);
相关文章推荐
- NSUserDefaults简介及如何使用 NSUserDefaults 存储自定义对象
- 如何设计和使用自定义的权限对象(自定义权限检查函数)
- 使用ViewState 存储自定义对象
- ADO.NET Entity Framework 如何:自定义建模和映射文件以使用自定义对象(实体框架)
- 如何在web.config中存储自定义对象
- 无法序列化会话状态。在“StateServer”或“SQLServer”模式下,ASP.NET 将序列化会话状态对象,因此不允许使用无法序列化的对象或 MarshalByRef 对象。如果自定义会话状态存储在“Custom”模式下执行了类似的序
- 如何设计和使用自定义的权限对象(自定义权限检查函数)
- NSUserDefaults 简介,使用 NSUserDefaults 存储自定义对象
- 对象文件[置顶] 如何在 ASM 存储中使用 Data Pump (expdp impdp)进行数据导出导入操作
- HashSet存储自定义对象如何保证唯一性
- NSUserDefaults 简介,使用 NSUserDefaults 存储自定义对象
- 如何设计和使用自定义的权限对象(自定义权限检查函数)
- IOS 如何持久化自定义对象(使用NSUserDefaults)
- NSUserDefaults 简介,使用 NSUserDefaults 存储自定义对象
- 如何设计和使用自定义的权限对象(自定义权限检查函数)
- Miley's Oracle讲堂第三课:如何在Oracle中使用对象表存储数据.
- 使用 NSUserDefaults 存储自定义对象
- 关于:“无法序列化会话状态。在“StateServer”或“SQLServer”模式下,ASP.NET 将序列化会话状态对象,因此不允许使用无法序列化的对象或 MarshalByRef 对象。如果自定义会话状态存储在“Custom”模式下执行了类似的序列化
- NSUserDefaults 简介,使用 NSUserDefaults 存储自定义对象
- 关于:“无法序列化会话状态。在“StateServer”或“SQLServer”模式下,ASP.NET 将序列化会话状态对象,因此不允许使用无法序列化的对象或 MarshalByRef 对象。如果自定义会话状态存储在“Custom”模式下执行了类似的序列化,则适用同样的限制。”的问题