第十章 屬性列表

第十章 屬性列表

說明: “Objective-C編程人員可以使用與C綁定的所有工具,例如標準C庫函數(shù)??梢允褂胢alloc() 和 free()函數(shù)處理動態(tài)內(nèi)存管理問題,或者使用 open(), read(), write(), fopen()和 fread()函數(shù)處理文件。 ”

屬性列表類包括 NSArray、NSDictionary、NSString、NSNumber、NSDate 和 NSData。

10.1 NSDate

NSDate 是用于處理日期和時間的基礎(chǔ)類??梢允褂肹NSDate date];獲取當(dāng)前的日期和時間,它是一個 自動釋放對象。以下代碼:

NSDate *date = [NSDate data]; NSLog (@”today is %@”, date); 將輸出:
Today is 2009-11-10 19:23:02

還可以獲取與當(dāng)前時間相隔一定時差的日期。例如,24 小時之間的確切日期 NSDate *yesterday = [NSDate dateWithTimeIntervalSinceNow: -(24*60*60) ]; NSLog (@”yesterday is %@”, yesterday);
將輸出

Yesterday is 2009-11-19 19:23:02

+dateWithTimeIntervalSinceNow: 接受一個 NSTimeInterval 參數(shù), 該參數(shù)是一個雙精度值, 表示以秒為 單位的時間間隔。通過該參數(shù)可以指定時間偏移的方式:對于將來的時間,使用正的時間間隔;對于過去 的時間,使用負的時間間隔。

10.2 NSData

NSData 類包裝了大量字節(jié)。我們可以獲得數(shù)據(jù)的長度和指向字節(jié)起始位置的指針。下面的NSData 對 象將保存一個普通的C字符串(一個字節(jié)序列) ,然后輸出數(shù)據(jù):

const char *string = “Hi there, this is a C string!”;
NSData *data = [NSData dataWithBytes:string length: strlen(string) + 1]; NSLog(@”data is %@”, data);

輸出結(jié)果:

data is <4869.... ....... 2100>

這是一個十六進制數(shù)據(jù)塊實際上就是上面的字符串, 0x48 代表字符 H,0x69 代表字符 i,等等。 strlen(string) + 1 中的“+1”用于包含 C 字符串所需的尾部的零字節(jié)(輸出結(jié)果末尾的00)。

可以使用%s 格式的說明符輸出字符串:
NSLog (@”%d bytes string is ‘%s’ ”, [data length], [data bytes]);
//-length 方法給出字節(jié)數(shù) -bytes 方法給出指向字符串起始位置的指針
輸出結(jié)果如下所示:
30 bytes string is ‘Hi there, this is a C string! ’
NSData 對象是不可改變的, 它們被創(chuàng)建后就不能改變。NSMutableData 支持在數(shù)據(jù)內(nèi)容中添加和刪除

字節(jié)。

10.3 寫入和讀取屬性列表
集合屬性列表類(NSArray、NSDictionary)具有一個-writeToFile: atomically: 方法,用于將屬性列表

寫入文件。NSString 和 NSData 也具有 writeToFile: atomically: 方法,但是只能寫出字符串和數(shù)據(jù)塊。 因此,我們可以將字符串存入一個數(shù)組,然后保存該數(shù)組:
NSArray *phrase;
phrase = [NSArray arrayWithObjects:@”I”, @”seem”, @”to”, @”be”, @”a”, @”verb”, nil ];

[phrase writeToFile: @”/tmp/verbiage.txt” atomically: YES];

現(xiàn)在如果看一下文件/tmp/verbiage.txt,應(yīng)該可以看到如下代碼: //***********************************************************************************************//

<?xml version=”1.0” encoding=”UTF-8”?>
<!DOCTYPE plist PUBLIC “-//Apple//DTD PLIST 1.0//EN”

“http://www.apple.com/DTDs/PropertyList-1.0.dtd”> <plist version=”1.0”>
<array>

<string>I<string >
< string >seem<string > < string >to< string >
< string >be< string >

< string >a< string >

< string >verb< string > </array>

</plist> //***********************************************************************************************//

雖然繁瑣, 但是正是我們要保存的內(nèi)容: 一個字符串?dāng)?shù)組。 這些屬性列表文件可以為任意復(fù)雜的式,形 可以包含字符串、數(shù)字和日期數(shù)組的字典數(shù)組。

現(xiàn)在已經(jīng)將 verbiage.txt 文件保存在了磁盤上,可以使用 +arrayWithContentsOfFile: 方法讀取該文件。 代碼如下所示:

NSArray *phrase2 = [NSArray arrayWithContentsOfFile:@” /tmp/verbiage.txt”]; NSLog (@”%@”, phrase2);
輸出結(jié)果正好與前面保存的形式相匹配:
(

I, seem, to, be,
a, verb

)

writeToFile: 方法中的 atomically: 參數(shù)的值為 BOOL 類型, 用于通知是否應(yīng)該首先將文件保存在臨時 文件中,當(dāng)文件成功保存后,再將該臨時文件和原始文件交換。這是一種安全機制。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容