詳解Objective-C文件加載與保存
Objective-C文件加載與保存是本文要介紹的內容,Cocoa提供了Core Data,能夠在后臺處理所有文件內容,但是本章討論的是Cocoa提供的兩個通用的文件處理類:屬性列表和對象編碼。
屬性列表
有一類名為屬性列表的對象,常簡寫為plist
屬性列表類包括:NSArray, NSDictionary, NSString, NSNumber, NSDate,NSData以及他們的變體
NSDate
NSDate是用于處理時間和日期的基礎類
[NSDate date]獲得當前日期
dateWithTimeIntervalSinceNow,接受一個NSTimeInterval參數,通過制定時間偏移量獲得新時間。正值表示將來,負值表示過去
NSData
NSData包裝了大量字節,可以獲得數據的長度和指向字節起始位置的指針
用dataWithBytes:length:方法獲得
length方法給出字節數
bytes方法給出指向字節起始位置的指針
NSData不能改變,創建后就只能使用而不能改變,NSMutableData可以改變
寫入和讀取屬性列表
如何使用屬性列表和文件關聯呢:
集合屬性列表類具有:writeToFile:atomically:方法,用于將屬性列表寫入文件
NSString、NSData也具有:writeToFile:atomically:方法,但只寫入字符串或數據塊
注意:atomically參數是BOOL型,用于說明保存過程中是否使用臨時文件,會占用雙倍空間,但除非文件非常大,否則應該使用YES,以防破壞原始文件
通過arrayWithContentsofFile:方法可以將文件內容讀入到數組中
writeToFile:atomically:的缺點是,不會返回錯誤信息,如果不能加載,只能從方法中得到nil指針
編碼對象
Cocoa具備一種機制,將對象轉換為某種格式保存到磁盤中,當讀取這些數據塊到內存后,還能基于保存的對象創建新的對象。這個過程稱為編碼和解碼,或稱為序列化和反序列化
例如:使用Interface Buider時,從庫中拖動對象,這些對象被保存到nib文件中,換言之,對象被序列化并保存到磁盤中。程序運行時,會將nib文件加載到內存中,串行化對象
通過實現NSCoding協議,可以使自己的對象實現相同的功能
- @protocal NSCoding
- -(void) encodeWithCoder:(NSCoder *) aCoder;
- -(id) initWithCoder:(NSCoder *) aDecoder;
NSCoder是一個抽象類,我們只用它的子類NSKeyedArchiver和NSKeyedUnarchiver
- encodeObject:forkey方法編碼,encodeXXX:forkey:
- decodeObject:forkey方法解碼,decodeXXX:forkey;
注意:initWithCoder需要調用父類init,如果父類采用NSCoding協議,則調用initWithCoder,否則調用init即可。
小結:詳解Objective-C文件加載與保存的內容介紹完了,希望通過本文的學習對你有所幫助!