10 属性列表 [Objective-C基础教程]

说明:“Objective-C编程人员可以使用与C绑定的所有工具,例如标准C库函数。可以使用malloc()
和free()函数处理动态内存管理问题,或者使用open(),read(),write(),fopen()和fread()函数处理文件。”
属性列表类包括NSArray、NSDictionary、NSString、NSNumber、NSDate和NSData。
10.1NSDate
NSDate是用于处理日期和时间的基础类。可以使用[NSDatedate];获取当前的日期和时间,它是一个
自动释放对象。以下代码:
NSDate*date=[NSDatedata];
NSLog(@”todayis%@”,date);
将输出:
Today is 2009-11-10 19:23:02
还可以获取与当前时间相隔一定时差的日期。例如,24小时之间的确切日期
NSDate*yesterday=[NSDate dateWithTimeIntervalSinceNow: -(24*60*60)];
NSLog(@”yesterdayis%@”, yesterday);
将输出

Yesterday is 2009-11-19 19:23:02
+dateWithTimeIntervalSinceNow:接受一个NSTimeInterval参数,该参数是一个双精度值,表示以秒为
单位的时间间隔。通过该参数可以指定时间偏移的方式:对于将来的时间,使用正的时间间隔;对于过去
的时间,使用负的时间间隔。
10.2NSData
NSData类包装了大量字节。我们可以获得数据的长度和指向字节起始位置的指针。下面的NSData对
象将保存一个普通的C字符串(一个字节序列),然后输出数据:
constchar*string=“Hithere,thisisaCstring!”;
NSData*data=[NSDatadataWithBytes:stringlength:strlen(string)+1];
NSLog(@”data is %@”,data);

输出结果:
datais<4869….…….2100>
这是一个十六进制数据块实际上就是上面的字符串,0x48代表字符H,0x69代表字符i,等等。
strlen(string)+1中的“+1”用于包含C字符串所需的尾部的零字节(输出结果末尾的00)。
可以使用%s格式的说明符输出字符串:
NSLog(@”%dbytesstringis‘%s’”,[datalength],[databytes]);
//-length方法给出字节数 -bytes方法给出指向字符串起始位置的指针
输出结果如下所示:
30bytesstringis‘Hithere,thisisaCstring!’
NSData对象是不可改变的,它们被创建后就不能改变。NSMutableData支持在数据内容中添加和删除
字节。

10.3写入和读取属性列表
集合属性列表类(NSArray、NSDictionary)具有一个-writeToFile:atomically: 方法,用于将属性列表
写入文件。NSString和NSData也具有writeToFile:atomically: 方法,但是只能写出字符串和数据块。
因此,我们可以将字符串存入一个数组,然后保存该数组:
NSArray*phrase;
phrase=[NSArrayarrayWithObjects:@”I”,@”seem”,@”to”,@”be”,@”a”,@”verb”,nil];
[phrase writeToFile: @”/tmp/verbiage.txt” atomically: YES];
现在如果看一下文件/tmp/verbiage.txt,应该可以看到如下代码:
//***********************************************************************************************//
<?xmlversion=”1.0”encoding=”UTF-8”?>
<!DOCTYPEplistPUBLIC“-//Apple//DTDPLIST1.0//EN”
“http://www.apple.com/DTDs/PropertyList-1.0.dtd”>
<plistversion=”1.0”>
<array>
<string>I<string>
<string>seem<string>
<string>to<string>
<string>be<string>

<string>a<string>
<string>verb<string>
</array>
</plist>
//***********************************************************************************************//
虽然繁琐,但是正是我们要保存的内容:一个字符串数组。这些属性列表文件可以为任意复杂的形式,
可以包含字符串、数字和日期数组的字典数组。
现在已经将verbiage.txt文件保存在了磁盘上,可以使用+arrayWithContentsOfFile:方法读取该文件。
代码如下所示:
NSArray*phrase2=[NSArray arrayWithContentsOfFile:@”/tmp/verbiage.txt”];
NSLog(@”%@”, phrase2);
输出结果正好与前面保存的形式相匹配:


I,
seem,
to,
be,
a,
verb
)
writeToFile: 方法中的atomically: 参数的值为BOOL类型,用于通知是否应该首先将文件保存在临时
文件中,当文件成功保存后,再将该临时文件和原始文件交换。这是一种安全机制。

来源://作者:/更新时间:2015-05-24
相关文章
评论:
验证码:
匿名评论:

最新文章

新热推荐

文章排行