沙盒存儲(chǔ)
應(yīng)用沙盒
每個(gè)iOS應(yīng)用都有自己的應(yīng)用沙盒(應(yīng)用沙盒就是文件系統(tǒng)目錄),與其他文件系統(tǒng)隔離。應(yīng)用必須待在自己的沙盒里,其他應(yīng)用不能訪問(wèn)該沙盒
應(yīng)用沙盒的文件系統(tǒng)目錄,如下圖所示(假設(shè)應(yīng)用的名稱叫Layer)

應(yīng)用程序包:(上圖中的Layer)包含了所有的資源文件和可執(zhí)行文件
Documents:
保存應(yīng)用運(yùn)行時(shí)生成的需要持久化的數(shù)據(jù),iTunes同步設(shè)備時(shí)會(huì)備份該目錄。例如,游戲應(yīng)用可將游戲存檔保存在該目錄
Documents獲取沙盒目錄的兩種方式
1、利用沙盒根目錄拼接”Documents”字符串
NSString *home = NSHomeDirectory();
NSString *documents = [home stringByAppendingPathComponent:@"Documents"];
2、利用NSSearchPathForDirectoriesInDomains函數(shù)
NSUserDomainMask 代表從用戶文件夾下找
YES 代表展開路徑中的波浪字符“~”。
NSArray *array = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, NO);
在iOS中,只有一個(gè)目錄跟傳入的參數(shù)匹配,所以這個(gè)集合里面只有一個(gè)元素
NSString *documents = [array objectAtIndex:0];
tmp:
保存應(yīng)用運(yùn)行時(shí)所需的臨時(shí)數(shù)據(jù),使用完畢后再將相應(yīng)的文件從該目錄刪除。應(yīng)用沒有運(yùn)行時(shí),系統(tǒng)也可能會(huì)清除該目錄下的文件。iTunes同步設(shè)備時(shí)不會(huì)備份該目錄
H獲取沙盒的tmp目錄
NSString *tmp = NSTemporaryDirectory();
Library/Caches:
保存應(yīng)用運(yùn)行時(shí)生成的需要持久化的數(shù)據(jù),iTunes同步設(shè)備時(shí)不會(huì)備份該目錄。一般存儲(chǔ)體積大、不需要備份的非重要數(shù)據(jù)
1、利用NSSearchPathForDirectoriesInDomains函數(shù)
NSUserDomainMask 代表從用戶文件夾下找
YES 代表展開路徑中的波浪字符“~”。
NSArray *array = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, NO);
在iOS中,只有一個(gè)目錄跟傳入的參數(shù)匹配,所以這個(gè)集合里面只有一個(gè)元素
NSString *Caches = [array objectAtIndex:0];
Library/Preference:
保存應(yīng)用的所有偏好設(shè)置,iOS的Settings(設(shè)置)應(yīng)用會(huì)在該目錄中查找應(yīng)用的設(shè)置信息。iTunes同步設(shè)備時(shí)會(huì)備份該目錄
XML屬性列表(plist)歸檔
如果對(duì)象是NSString、NSDictionary、NSArray、NSData、NSNumber等類型,就可以使用writeToFile:atomically:方法直接將對(duì)象寫到屬性列表文件中

Preference(偏好設(shè)置)
偏好設(shè)置好處:
1.不需要關(guān)心文件名
2.快速進(jìn)行鍵值對(duì)存儲(chǔ)
3.直接存儲(chǔ)基本數(shù)據(jù)類型
存取偏好設(shè)置


讀取上次保存的設(shè)置


注意:
UserDefaults設(shè)置數(shù)據(jù)時(shí),不是立即寫入,而是根據(jù)時(shí)間戳定時(shí)地把緩存中的數(shù)據(jù)寫入本地磁盤。所以調(diào)用了set方法之后數(shù)據(jù)有可能還沒有寫入磁盤應(yīng)用程序就終止了。出現(xiàn)以上問(wèn)題,可以通過(guò)調(diào)用synchornize方法強(qiáng)制寫入
[defaults synchornize];
NSKeyedArchiver歸檔(NSCoding)
如果對(duì)象是NSString、NSDictionary、NSArray、NSData、NSNumber等類型,可以直接用NSKeyedArchiver進(jìn)行歸檔和恢復(fù)
不是所有的對(duì)象都可以直接用這種方法進(jìn)行歸檔,只有遵守了NSCoding協(xié)議的對(duì)象才可以
NSCoding協(xié)議有2個(gè)方法
encodeWithCoder
每次歸檔對(duì)象時(shí),都會(huì)調(diào)用這個(gè)方法。一般在這個(gè)方法里面指定如何歸檔對(duì)象中的每個(gè)實(shí)例變量,可以使用encodeObject:forKey:方法歸檔實(shí)例變量
initWithCoder(只要解析一個(gè)文件的時(shí)候就會(huì)調(diào)用,如storyboard、xib)
每次從文件中恢復(fù)(解碼)對(duì)象時(shí),都會(huì)調(diào)用這個(gè)方法。一般在這個(gè)方法里面指定如何解碼文件中的數(shù)據(jù)為對(duì)象的實(shí)例變量,可以使用decodeObject:forKey方法解碼實(shí)例變量






SQLite3
SQLite3簡(jiǎn)介

創(chuàng)建、打開、關(guān)閉數(shù)據(jù)庫(kù)

執(zhí)行不返回?cái)?shù)據(jù)的SQL語(yǔ)句

帶占位符插入數(shù)據(jù)



FMDB CoreData

coreData 耗性能,需要生成SQL語(yǔ)句,生成一些不必要的東西。
https://blog.csdn.net/jasonblog/article/details/17842535