以下是将属性列表文件plist数据内容以二进制形式写入文件的代码:
void writeCapitols (void)
{
NSMutableArray *capitols = [NSMutableArrayarrayWithCapacity:10];
NSMutableDictionary *capitol = [NSMutableDictionarydictionaryWithObject:@"Canada"forKey:@"country"];
[capitol setObject:@"Ottawa"forKey:@"capitol"];
[capitols addObject:capitol];
capitol = [NSMutableDictionarydictionaryWithObject:@"Norway"forKey:@"country"];
[capitol setObject:@"Oslo"forKey:@"capitol"];
[capitols addObject:capitol];
NSString *error =nil;
NSData *encodedArray = [NSPropertyListSerializationdataFromPropertyList:capitols
format:NSPropertyListBinaryFormat_v1_0
errorDescription:&error];
[encodedArray writeToFile:@"/tmp/capitols.txt"atomically:YES];
}
如你所见,我们将数组数据转换成了NSData类型并写入了文件中。
将数据读取回内存要多执行一步,即指定文件的类型。我们创建了一个指针,如果文件格式与指定的类型不同,可以换用原格式类型的指针,也可以将读取的内容转换成新的格式。
static void modifyCapitols(void)
{
NSData *data = [NSDatadataWithContentsOfFile:@"/tmp/capitols.txt"];
NSPropertyListFormat propertyListFormat =NSPropertyListXMLFormat_v1_0;
NSString *error =nil;
NSMutableArray *capitols = [NSPropertyListSerializationpropertyListFromData:data
mutabilityOption:NSPropertyListMutableContainersAndLeaves
format:&propertyListFormat
errorDescription:&error];
NSLog(@"capitols %@", capitols);
}
在main函数中,我们调用writeCapitols();和modifyCapitols();的输出结果如下:capitols (
{
capitol = Ottawa;
country = Canada;
},
{
capitol = Oslo;
country = Norway;
}
)
可以使用[NSDate date]来获取当前的日期和时间,它会返回一个能自动释放的对象。
NSDate *date = [NSDatedate];
NSLog (@"today is %@", date);
将输出的结果为:today is 2013-12-4 19:58:06 -0400。
有些属性列表文件,特别是首选项文件,是以压缩的二进制格式存储的。通过使用plutil命令:plutil - convert xml1文件名.plist,可以将这些文件转换成人可以理解的字面形式。
Cocoa具备一种将对象转换成某种格式并保存到磁盘中的机制。对象可以将它们的实例变量和其他数据编码为数据块,然后保存到磁盘中。这些数据块以后还可以读回内存中,并且还能基于保存的数据创建新对象。这个过程被称为编码与解码(encoding and decoding),也可以叫做序列化与反序列化(serialization and deserialization)。