你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> IOS的四種數據存儲方式和優略

IOS的四種數據存儲方式和優略

編輯:IOS開發綜合

IOS有四種常用數據存儲方式:
第一種方法:用NSUserDefaults存儲配置信息
NSUserDefaults被設計用來存儲設備和應用的配置信息,它通過一個工廠方法返回默認的、也是最常用到的實例對象。這個對象中儲存了系統中用戶的配置信息,開發者可以通過這個實例對象對這些已有的信息進行修改,也可以按照自己的需求創建新的配置項。他在IOS6之後已經在文件沙盒中看不到它的信息了,所以可以存儲機密信息(用戶名和密碼)密碼,防止手機系統被破解後看你的沙盒子文件。一般這種方法存儲少量信息,若是存儲大量信息,如存儲一百個數據你怎麼記錄鍵值啊?所以它不利於統一管理。所以不建議采用。
+ (void)setUserDefaultsValue:(id)value key:(NSString *)key
{
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];

[userDefaults setObject:value forKey:key];
[[NSUserDefaults standardUserDefaults] synchronize];

}

(id)objectForKey:(NSString *)key
{
return [[NSUserDefaults standardUserDefaults] objectForKey:key];
}

調用:
NSString *selectedKey = [[NSUserDefaults standardUserDefaults] objectForKey:@”selectedKey”];

第二種方法:方法用CoreData規劃應用中對象
一個支持持久化的,對象圖和生命周期的自動化管理方案。嚴格意義上說CoreData是一個管理方案,他的持久化可以通過SQLite、XML或二進制文件儲存。如官方定義所說,CoreData的作用遠遠不止儲存數據這麼簡單,它可以把整個應用中的對象建模並進行自動化的管理。他和微軟的MFC::CArchive實現對象的持久化和反持久化一樣只能支持支持具有序列化的函數,把對象分解成基本數據類型的類型的持久化,如字符串,整形數字,浮點型數據,字符。由於持久化的對象數據都在一個對象中,所以他利於數據管理。所以采用CoreData存儲數據就不需要采用NSUserDefaults數據存儲數據了。
-(id)initWithDictionary:(NSDictionary*)dic
{
if (self=[super init])
{
self.sex=[dic[@”sex”] intValue];
self.driverYear=[dic[@”driverYear”] intValue];
}

return self;

}

-(void)encodeWithCoder:(NSCoder *)aCoder
{
[aCoder encodeObject:[NSNumber numberWithInt:self.driverId] forKey:@”id”];
[aCoder encodeObject:[NSNumber numberWithInt:self.sex] forKey:@”sex”];

}
-(id)initWithCoder:(NSCoder *)aDecoder
{
if (self=[super init])
{
self.sex=[[aDecoder decodeObjectForKey:@”sex”] intValue];
self.driverYear=[[aDecoder decodeObjectForKey:@”driverYear”] intValue];
}
return self;
}
第三種方法:文件沙盒存儲
主要存儲非機密數據,大的數據。如:下載的圖片,沒有鍵值的分行記錄。注意若系統被破解了你的沙盒中的文件可以被別人獲得。這種方法操作很簡單。不知道為何很多介紹數據存儲的文章為何把這種最常見的方式給忽略。
//寫文件
+ (void)writeToDocumentWithImageData:(NSData )data name:(NSString )fileName
{
NSString *path = [self filePath:fileName];

[data writeToFile:path atomically:YES];

}
//獲取文件路徑
+ (NSString*)filePath:(NSString*)fileName {
NSArray* myPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString* myDocPath = [myPaths objectAtIndex:0];
NSString* filePath = [myDocPath stringByAppendingPathComponent:fileName];
return filePath;
}
第四種方法:數據庫存儲
iOS的SDK裡預置了SQLite的庫,開發者可以自建SQLite數據庫。SQLite每次寫入數據都會產生IO消耗,把數據歸檔到相應的文件。
SQLite擅長處理的數據類型其實與NSUserDefaults差不多,也是基礎類型的小數據,只是從組織形式上不同。開發者可以以關系型數據庫的方式組織數據,使用SQL DML來管理數據。 一般來說應用中的格式化的文本類數據可以存放在數據庫中,尤其是類似聊天記錄、Timeline等這些具有條件查詢和排序需求的數據。
無論你采用系統自帶的還是用的SQLight第三方庫的數據存儲本質都數據庫存儲,沒必要再另外分類。數據存儲稍微麻煩,並且存儲的速度較慢,只有真正需要用到的地方才采用這種方式,如:聊天記錄,地圖地理信息查詢。

 

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved