先记录数据持久化。iOS客户端提供的常用数据持久化方案:NSUserDefaults代表的用户设置,NSKeydArchiver代表的归档,plist文件存储,SQLite数据库(包括上层使用的Core Data,FMDB)。每种方案都有各自的应用场景和范围,不能一概而论。不过可 ...
先记录数据持久化。
iOS客户端提供的常用数据持久化方案:NSUserDefaults代表的用户设置,NSKeydArchiver代表的归档,plist文件存储,SQLite数据库(包括上层使用的Core Data,FMDB)。
每种方案都有各自的应用场景和范围,不能一概而论。不过可以大致以数据储存量和复杂度来区别。
除了以上提到的方案,再记录一种方案:LevelDB代表的键值对数据库。
NSUserDefaults常用方法:
1.可以使用标准用户设置[NSUserDefaults standardUserDefaults],也可以通过init相关方法初始化新的用户设置
2.像使用字典一样获取、设置、移除键值对
3.synchronize方法已经不建议使用
Plist文件存储:
1.代码读取应用内已经存在的plist文件,得到一个字典
NSString *filePath = [[NSBundle mainBundle] pathForResource:@"test" ofType:@"plist"];
NSMutableDictionary *dic = [[NSMutableDictionary alloc] initWithContentsOfFile:filePath];
2.修改数据后,保存或者创建plist文件
[dic writeToFile:filePath atomically:YES];
NSKeydArchiver和NSKeyedUnarchiver:
1.归档有一个类方法:+ (BOOL)archiveRootObject:(id)rootObject toFile:(NSString *)path;
解档有一个类方法:+ (nullable id)unarchiveObjectWithFile:(NSString *)path;
可以直接对某一个对象进行归档和解档。
2.但如果需要对多个键值对进行操作,建议使用如下方法:
+ (void)archiveDataWithDictionary:(NSDictionary *)dic filename:(NSString*)filename archiveSuccessBlock:(archiveSuccessBlock)archiveSuccessBlock{ NSString *fullPath = [self getAppArchivedFileFullPathWithName:filename]; dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ NSMutableData *data = [NSMutableData data]; NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data]; NSArray *keyArray = [NSArray arrayWithArray:[dic allKeys]]; [archiver encodeObject:keyArray forKey:filename]; for (NSString *key in keyArray) { NSObject *object = [dic objectForKey:key]; [archiver encodeObject:object forKey:key]; } [archiver finishEncoding]; [data writeToFile:fullPath atomically:YES]; if (archiveSuccessBlock) { archiveSuccessBlock(); } });}+ (NSDictionary *)unarchiveDataWithFilename:(NSString *)filename{ NSMutableDictionary *dic = [NSMutableDictionary dictionary]; NSData *data = [[NSData alloc] initWithContentsOfFile:[self getAppArchivedFileFullPathWithName:filename]]; NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data]; NSArray *keyArray = [NSArray arrayWithArray:[unarchiver decodeObjectForKey:filename]]; for (NSString *key in keyArray) { NSObject *object = [unarchiver decodeObjectForKey:key]; [dic setObject:object forKey:key]; } [unarchiver finishDecoding]; return dic;}
原标题:App开发流程之数据持久化和编译静态链接库
关键词:
*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们:
admin#shaoqun.com
(#换成@)。