標籤:
IOS資料持久化的方式分為三種:
- 屬性列表 (plist、NSUserDefaults)
- 歸檔 (NSKeyedArchiver)
- 資料庫 (SQLite、Core Data、第三方類庫等
歸檔(又名序列化),把對象轉為位元組碼,以檔案的形式儲存到磁碟上;程式運行過程中或者當再次重寫開啟程式的時候,可以通過解歸檔(還原序列化)還原這些對象。本文主要介紹swift實現iOS資料歸檔。
歸檔Foundation架構對象
func archiveData(){ var path: AnyObject=NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true)[0] var filePath=path.stringByAppendingPathComponent("data.archive") //歸檔 var array=["Bill Gates","Steve Jobs"] if(NSKeyedArchiver.archiveRootObject(array, toFile: filePath)){ NSLog("Archive Success") } } func unarchiveData(){ var path: AnyObject=NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true)[0] var filePath=path.stringByAppendingPathComponent("data.archive") //反歸檔 var data=NSKeyedUnarchiver.unarchiveObjectWithFile(filePath) as NSArray NSLog("%@", data) }
小結:
- 歸檔和解歸檔操作步驟簡單
- 一次只能歸檔一個對象,如果是多個對象歸檔需要分開進行
- 歸檔的對象是Foundation架構中的對象
- 歸檔和解歸檔其中任意對象都需要歸檔和解歸檔整個檔案
- 歸檔後的檔案是加密的,所以歸檔檔案的副檔名可以隨意取
歸檔自訂資料
var path=NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true)[0] as NSString var filePath=path.stringByAppendingPathComponent("data.archive") //歸檔 var data=NSMutableData() var archiver=NSKeyedArchiver(forWritingWithMutableData: data) archiver.encodeObject(["Bill Gates","Steve Jobs"], forKey: "data"); archiver.encodeInt(32, forKey: "age"); archiver.encodeObject("test message", forKey: "tip"); archiver.finishEncoding() data.writeToFile(filePath, atomically: true) //反歸檔 var unarchiveData=NSData(contentsOfFile: filePath) var unarchiver=NSKeyedUnarchiver(forReadingWithData: unarchiveData!) var decodeData=unarchiver.decodeObjectForKey("data") as NSArray var decodeAge=unarchiver.decodeIntForKey("age") var decodeTip=unarchiver.decodeObjectForKey("tip") as NSString NSLog("data=%@,age=%i,tip=%@",decodeData,decodeAge,decodeTip)
小結:
- 在帶鍵的歸檔中,每個歸檔欄位都有一個key值,解歸檔時key值要與歸檔時key值匹配
- 帶鍵歸檔可以一次儲存多個對象
- 歸檔的對象是Foundation架構中的對象
- 歸檔和解歸檔其中任意對象都需要歸檔和解歸檔整個檔案
- 歸檔後的檔案是加密的,所以歸檔檔案的副檔名可以隨意取
iOS開發筆記-swift實現iOS資料持久化之歸檔NSKeyedArchiver