iOS中常用的四种数据持久化技巧
发布时间:2021-11-21 19:38:09 所属栏目:教程 来源:互联网
导读:iOS中的数据持久化方式,基本上有以下四种:属性列表、对象归档、SQLite3和Core Data 1.属性列表 涉及到的主要类:NSUSErDefaults,一般 [NSUserDefaults standardUserDefaults]就够用了 @interface User : NSObject NSCoding @property (nonatomic, assign) N
iOS中的数据持久化方式,基本上有以下四种:属性列表、对象归档、SQLite3和Core Data 1.属性列表 涉及到的主要类:NSUSErDefaults,一般 [NSUserDefaults standardUserDefaults]就够用了 @interface User : NSObject <NSCoding> @property (nonatomic, assign) NSInteger userID; @property (nonatomic, copy) NSString *name; @end 使用方法 1).分开存取 // 存 [[NSUserDefaults standardUserDefaults] setInteger:userID forKey:@”userID”]; [[NSUserDefaults standardUserDefaults] setObject:name forKey:@”name”]; // 取 NSInteger uId = [[[NSUserDefaults standardUserDefaults] integerValueForKey:@”userID”]; NSString* name = [[NSUserDefaults standardUserDefaults] stringForKey:@”name”]; 2).按对象存取 // 存 [[NSUserDefaults standardUserDefaults] setObject:self forKey:@”user”]; // 取 User* u = [[NSUserDefaults standardUserDefaults] objectForKey”@”user”]; 2.对象归档 要使用对象归档,对象必须实现NSCoding协议.大部分Object C对象都符合NSCoding协议,也可以在自定义对象中实现NSCoding协议,要实现NSCoding协议,实现两个方法: - (void) encodeWithCoder:(NSCoder *)encoder 与 -(void)initWithCoder:(NSCoder *)encoder 同时,建议对象也同时实现NSCopying协议,该协议允许复制对象,要实现NSCopying协议须实现 -(id)copyWithZone:(NSZone *)zone 方法 。 @interface User : NSObject <NSCoding> @property (nonatomic, assign) NSInteger userID; @property (nonatomic, copy) NSString *name; @end @implementation User // 以下两个方法一定要实现,不然在调用的时候会crash - (void)encodeWithCoder:(NSCoder *)aCoder; { // 这里放置需要持久化的属性 [aCoder encodeObject:[NSNumber numberWithInteger:self.userID] forKey:@”userID”]; [aCoder encodeObject:self.name forKey:@"name"]; } - (id)initWithCoder:(NSCoder *)aDecoder { if (self = [self init]) { // 这里务必和encodeWithCoder方法里面的内容一致,不然会读不到数据 self.userID = [[aDecoder decodeObjectForKey:@"userID"] integerValue]; self.name = [aDecoder decodeObjectForKey:@"name"]; } return self; } // 使用方法 + (BOOL)save { NSError *error = nil; // 确定存储路径,一般是Document目录下的文件 NSString* fileName = [self getFileName]; NSString* filePath = [self getFilePath]; if (![[NSFileManager defaultManager] createDirectoryAtPath:filePath withIntermediateDirectories:YES attributes:nil error:&error]) { NSLog(@”创建用户文件目录失败”); return NO; } return [NSKeyedArchiver archiveRootObject:self toFile:[fileName:userId]]; } ![]() (编辑:PHP编程网 - 黄冈站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |