你的位置:首页 > 软件开发 > 操作系统 > App开发流程之数据持久化和编译静态链接库

App开发流程之数据持久化和编译静态链接库

发布时间:2016-09-19 13:00:05
先记录数据持久化。iOS客户端提供的常用数据持久化方案:NSUserDefaults代表的用户设置,NSKeydArchiver代表的归档,plist文件存储,SQLite数据库(包括上层使用的Core Data,FMDB)。每种方案都有各自的应用场景和范围,不能一概而论。不过可 ...

App开发流程之数据持久化和编译静态链接库

先记录数据持久化。

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 (#换成@)。

可能感兴趣文章

我的浏览记录