1.沙盒介紹
沙盒路徑是應用程序專門為用戶存儲數據而存在的目錄
1.1 Documents目錄:保存應用程序自己的數據(比如:游戲進度存檔、軟件的一些個人設置等)。通過iTunes、
iCloud備份時,會備份這個目錄下的數據。
1.2 Tmp目錄:
存儲一些其他臨時數據,系統磁盤空間不夠,手機重啟時,會自動清除這個目錄的數 據。無需程序員手動清除該目錄中的數據.iTunes、iCloud備份時,不會備份這個目錄下的數 據。
1.3 Caches目錄:
保存從網絡上下載的文件(比如:聽歌時的緩存、圖片的緩存等),這個目錄下的數據 不會被自動刪除,需要程序員自己實現清除目錄數據功能。iTunes、iCloud備份時,不會備 份這個目錄下的數據。
1.3 Preference目錄:
保存通過"偏好設置"寫入的數據。iTunes、iCloud備份時,會備份這個目錄下的數據。
1.4獲取沙盒根目錄-拼接方式
NSString *path = NSHomeDirectory();
path = [path stringByAppendingString:@”/Documents”];
path = [path stringByAppendingPathComponent:@”Documents”];
1.5 獲取沙盒全路徑-系統方式[NSSearchPathForDirectoriresInDomains() firstObject];
yes是絕對路徑no是相對路徑
[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES)lastObject];
NSSearchPathDomainMask
NSUserDomainMask =1,//?用戶主目錄中
NSLocalDomainMask =2,//當前機器中
NSNetworkDomainMask =4,//?網絡中可見的主機
NSSystemDomainMask =8,//系統目錄,不可修改(/System)
NSAllDomainsMask =0x0ffff,//全部
2 偏好讀寫
本質就是通過plist文件存儲數據 但是使用起來更簡單(無需關注文件、文件夾路徑和名稱)。目錄每次都會發生改變
通過"偏好設置"的?方式讀、寫?文件時,路徑在"沙盒根??目錄"->"Library"->"Preferences"
數據只能存儲在一個文件中,不存儲大批量數據(很多時候大批量數據要分多個文件存儲)
2.1 寫入方式
NSUserDefaults*defaults = [NSUserDefaultsstandardUserDefaults];
[defaultssetObject:@"zhangsan"forKey:@"name"];
[defaultssetBool:YESforKey:@"sex"];
[defaultssetInteger:20forKey:@"age"];
[defaultssynchronize];
2.2 讀取方式
NSUserDefaults*defaults = [NSUserDefaults
standardUserDefaults];NSString*name = [defaultsobjectForKey:@"name"];BOOLsex = [defaultsboolForKey:@"sex"];NSIntegerage = [defaultsintegerForKey:@"age"];
2.3 使用偏好設置存取數據的缺點
通過"plist"文件來保存數據,無法直接將一個對象保存到文件中。比如Person對象就沒有
writeToFile方法。而偏好設置只能存儲少量數據,對于大數據存儲不適合
2.4 使用注意點
使用對象:僅僅是Foundation框架中的一些類,比如: NSString\\NSArray\\NSDictionary\\NSSet\\NSNumber\\NSData,對于其它數據類型不能直接存 儲。
3 數據歸檔
3.1 特點
"歸檔"是一種可以把任何對象,直接保存為文件的方式。(其中包括"歸檔"與"反歸檔(讀檔)")
3.2 使用前提
必須是實現協議 ,通過"歸檔"的方式來存儲,對象必須遵守NSCoding協議,也就意味著通過"歸檔"的方式能 將任何遵守了NSCoding協議的"對象"存儲到文件中
3.3歸檔
可以歸檔數組
重點:子類必須也要讓父類歸檔,也就是說,子類想要使用歸檔,他的父類也必須實現歸檔方法,對需要歸檔的屬性進行歸檔.
使用歸檔需要實現的協議方法
將數據歸檔的的具體實現
- (void) saveContact
{
NSString
*docPath=[NSSearchPathForDirectoriesInDomains(NSDocumentD
irectory,NSUserDomainMask,YES)lastObject];
NSString*filePath=[docPathstringByAppendingPathComponent:@"contact.data"];
//歸檔操作
[NSKeyedArchiverarchiveRootObject:self.contactstoFile:filePath];
}
3.4 反歸檔
重點:父類必須init,子類必須也要調用父類的反歸檔
//懶加載--從歸檔?文件中獲得數據
- (NSArray*)contacts
{
if(_contacts==nil) {NSString
*docPath=[NSSearchPathForDirectoriesInDomains(NSDocumentD
irectory,NSUserDomainMask,YES)lastObject];
NSString*filePath=[docPathstringByAppendingPathComponent:@"contact.data"];
_contacts=[NSKeyedUnarchiverunarchiveObjectWithFile:filePath];
if(_contacts==nil)//有可能為nil{
_contacts=[NSMutableArrayarray];
}
}
return_contacts;