標籤:
iOS開發UI篇—ios應用資料存放區方式(XML屬性列表-plist)
一、ios應用常用的資料存放區方式
1.plist(XML屬性列表歸檔)2.喜好設定3.NSKeydeArchiver歸檔(儲存自訂對象)4.SQLite3(資料庫,關係型資料庫,不能直接儲存物件,要編寫一些資料庫的語句,將對象拆開儲存)5.Core Data(對象型的資料庫,把內部環節屏蔽)
二、應用沙箱
每個iOS應用都有?己的應?沙箱(應用沙箱就是檔案系統目錄),與其他檔案系統隔離。應?必須待在?己的沙箱裡,其他應用不能訪問該沙箱(提示:在IOS8中已經開放訪問)
應?沙箱的檔案系統?錄,如所示(假設應用的名稱叫Layer)
模擬器應?用沙箱的根路徑在: (apple是?使用者名稱, 7.0是模擬器版本) /Users/apple/Library/Application Support/iPhone Simulator/7.0/Applications
三、應用沙箱結構分析
應?程式包:(中的Layer)包含了所有的資源檔和可執行檔
Documents:儲存應?運行時產生的需要持久化的資料,iTunes同步裝置時會備份該目錄。例如,遊戲應用可將遊戲存檔儲存在該目錄
tmp:儲存應?運行時所需的臨時資料,使?完畢後再將相應的檔案從該目錄刪除。應用沒有運行時,系統也可能會清除該目錄下的檔案。iTunes同步裝置時 不會備份該目錄
Library/Caches:儲存應用運行時?成的需要持久化的資料,iTunes同步裝置時不會備份該目錄。?一般儲存體積大、不需要備份的非重要資料
Library/Preference:儲存應用的所有喜好設定,iOS的Settings(設定) 應?會在該?錄中尋找應?的設定資訊。iTunes同步裝置時會備份該目錄
四、應用沙箱常見的擷取方式
● 沙箱根目錄:NSString *home = NSHomeDirectory(); ● Documents:(2種?方式)
● 利用沙箱根目錄拼接”Documents”字串
NSString *home = NSHomeDirectory();
NSString *documents = [home stringByAppendingPathComponent:@"Documents"]; // 不建議採用,因為新版本的作業系統可能會修改目錄名
● 利?NSSearchPathForDirectoriesInDomains函數
// NSUserDomainMask 代表從使用者檔案夾下找
// YES 代表展開路徑中的波浪字元“~”
NSArray *array = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, NO); // 在iOS中,只有一個目錄跟傳入的參數匹配,所以這個集合裡面只有一個元素
NSString *documents = [array objectAtIndex:0];
● tmp:NSString *tmp = NSTemporaryDirectory();
● Library/Caches:(跟Documents類似的2種?方法)
● 利用沙箱根目錄拼接”Caches”字串
● 利?NSSearchPathForDirectoriesInDomains函數(將函數的第2個參數改 為:NSCachesDirectory即可)
● Library/Preference:通過NSUserDefaults類存取該目錄下的設定資訊
相應的代碼:
#import "NJViewController.h"#import "NJPerson.h"@interface NJViewController ()- (IBAction)saveDataBtnClick:(id)sender;- (IBAction)readDataBtnClick:(id)sender;@end@implementation NJViewController/** * 點擊儲存按鈕 */- (IBAction)saveDataBtnClick:(id)sender { // youtube做法// NSString *path = @"/Users/apple/Library/Application Support/iPhone Simulator/7.1/Applications/A6D53E11-DDF0-4392-B2D4-FE77A96888A6/Documents/abc.plist"; // 擷取應用程式根目錄 NSString *home = NSHomeDirectory(); // 不建議寫/ //NSString *path = [home stringByAppendingString:@"/Documents"]; // 不建議Documents寫死 //NSString *path = [home stringByAppendingPathComponent:@"Documents"]; // NSUserDomainMask 在使用者目錄下尋找 // YES 代表使用者目錄的~ // NSDocumentDirectory 尋找Documents檔案夾 // 建議使用如下方法動態擷取 NSString *doc = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject]; // 拼接檔案路徑 NSString *path = [doc stringByAppendingPathComponent:@"abc.plist"]; NSLog(@"%@", path); //NSArray *arr = @[@"lnj", @"28"]; //[arr writeToFile:path atomically:YES]; // NSDictionary *dict = @{@"name": @"lnj", @"age":@"28"}; // 調用writeToFile將資料寫入檔案 // [dict writeToFile:path atomically:YES]; /* plist只能儲存系統內建的一些常規的類, 也就是有writeToFile方法的對象才可以使用plist儲存資料 字串/字典/資料/NSNumber/NSData ... */ // 自訂的對象不能儲存到plist中 NJPerson *p = [[NJPerson alloc] init]; p.name =@"lnj"; NSDictionary *dict = @{@"person": @"abc"}; [dict writeToFile:path atomically:YES];}/** * 點擊讀取按鈕 */- (IBAction)readDataBtnClick:(id)sender { NSString *doc = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject]; NSString *path = [doc stringByAppendingPathComponent:@"abc.plist"] ; // 讀取資料 NSDictionary *dict = [NSDictionary dictionaryWithContentsOfFile:path]; NSLog(@"%@", dict);}@end
五、屬性列表
● 屬性列表是一種XML格式的檔案,拓展名為plist
● 如果對象是NSString、NSDictionary、NSArray、NSData、 NSNumber等類型,就可以使用writeToFile:atomically:?法 直接將對象寫到屬性列表檔案中
iOS開發UI篇—ios應用資料存放區方式(XML屬性列表-plist)