歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

iOS中常用的四種數據持久化方法

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]];
 }
 @end

Copyright © Linux教程網 All Rights Reserved