1,plist文件。php
Plist文件:也就是咱們常說的屬性列表,它是一種明文的輕量級存儲方式,存儲的格式有不少種,最常規的是XML格式.Plist文件只能用數組或者字典進行讀取.html
優勢:sql
用來存儲少許的數據,響應速度快
數據庫
其賦值方式簡單數組
缺點:安全
1.正如優勢同樣,只能存儲少許數據,不能存儲大文件數據服務器
2.明文存儲,因此其安全性欠缺app
2,NSUserdefaults框架
NSUserdefaults : 適合存儲輕量級的本地數據,好比要保存一個登錄界面的數據,用戶名、密碼之類的.dom
NSUserDefaults本質上是就是plist文件,放在App的Library/Preferences目錄下.可是在使用NSUserdefaults的時候,特別須要注意,由於它不是即時將數據寫入文件的,爲了防止數據丟失,咱們一般須要在後面就手動將其寫入文件.
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; [defaults setObject:@"name" forKey:@"name"]; [defaults synchronize];
3,SQLite3
SQLite3 : 是一個輕量級,跨平臺的小型數據庫,其擁有可移植性高、有着和MySql幾乎相同的數據庫語句以及無需服務器便可使用的優勢:
1.能夠存儲大量的數據,存儲和檢索的速度很是快;
2.能對數據進行大量的聚合,這樣比起使用對象來進行這些操做要快。
缺點:
1.它沒有提供數據庫的建立方式;
2.它基於C語言框架設計,沒有面向對象的API,因此使用起來比較麻煩;
3.複雜的數據模型的數據建表相對而言比較麻煩。
4.sqlite語句複雜
4,CoreData.
CoreData : Cocoa框架提供的一種數據持久話方式,底層就是SQLite,不須要SQL命令便可使用,是一種更加友好使用簡化的數據庫。
5,歸檔和反歸檔
對象文件歸檔。即存儲到二進制文件中。Cocoa提供了NSCoding和NSKeyArchiver兩個工具類,能夠把咱們自定義的對象編碼成二進制數據流,而後存進文件裏面;
缺點:大量數據和頻繁讀寫不合適使用。
6,write寫入磁盤(沙盒)
第一步:得到文件即將保存的路徑:
NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask,YES);
//使用C函數NSSearchPathForDirectoriesInDomains來得到沙盒中目錄 的全路徑。該函數有三個參數,目錄類型、he domain mask、布爾值。其中布爾值表示是否須要經過~擴展路徑。並且第一個參數是不變的,即爲NSSearchPathDirectory 。在IOS中後兩個參數也是不變的,即爲:NSUserDomainMask 和 YES。
NSString *ourDocumentPath =[documentPaths objectAtIndex:0];
還有一種方法是使用NSHomeDirectory函數得到sandbox的路徑。具體的用法爲:
NSString *sandboxPath = NSHomeDirectory();
// Once you have the full sandbox path, you can create a path from it,可是不能在sandbox的本文件層上寫文件也不能建立目錄,而應該是此基礎上建立一個新的可寫的目錄,例如Documents,Library或者temp。
NSString *documentPath = [sandboxPath stringByAppendingPathComponent:@"Documents"]; //將Documents添加到sandbox路徑上,具體緣由前面分析了!
這二者的區別就是:使用NSSearchPathForDirectoriesInDomains比在NSHomeDirectory後面添加Document更加安全。由於該文件目錄可能在將來發送的系統上發生改變。
第二步:生成在該路徑下的文件:
NSString *FileName=[documentDirectory stringByAppendingPathComponent:fileName];//fileName就是保存文件的文件名
第三步:往文件中寫入數據:
[data writeToFile:FileName atomically:YES];//將NSData類型對象data寫入文件,文件名爲FileName
最後:從文件中讀出數據:
NSData data=[NSData dataWithContentsOfFile:FileName options:0 error:NULL];//從FileName中讀取出數據
雖然沙盒中有這麼多文件夾,可是沒有文件夾都不盡相同,都有各自的特性。因此在選擇存放目錄時,必定要認真選擇適合的目錄。
"應用程序包": 這裏面存放的是應用程序的源文件,包括資源文件和可執行文件。
1
2
|
NSString *path = [[NSBundle mainBundle] bundlePath]; NSLog(@"%@", path);
|
Documents: 最經常使用的目錄,iTunes同步該應用時會同步此文件夾中的內容,適合存儲重要數據。
NSString *path = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).firstObject; NSLog(@"%@", path);
Library/Caches: iTunes不會同步此文件夾,適合存儲體積大,不須要備份的非重要數據。
NSString *path = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES).firstObject; NSLog(@"%@", path);
Library/Preferences: iTunes同步該應用時會同步此文件夾中的內容,一般保存應用的設置信息
tmp: iTunes不會同步此文件夾,系統可能在應用沒運行時就刪除該目錄下的文件,因此此目錄適合保存應用中的一些臨時文件,用完就刪除。
NSString *path = NSTemporaryDirectory(); NSLog(@"%@", path);