与archiveRootObject:toFile:和writeToFile的区别:

时间:2013-04-18 07:42:03

标签: ios objective-c nskeyedarchiver

最近,我正在学习NSKeyedArchiver和NSKeyedUnarchiver。我发现有三种方法可以存档数组,而我正试图弄清楚它们之间的区别。

1.使用archiveRootObject:toFile:

    [NSKeyedArchiver archiveRootObject:testArray toFile:filePath];

2.获取archivedDataWithRootObject:的数据并将其写入文件

    NSData *data = [NSKeyedArchiver archivedDataWithRootObject:testArray];
    [data writeToFile:filePath atomically:YES];

3.使用encodeObject:获取数据

    NSMutableData *data = [NSMutableData data];
    NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data];
    [archiver encodeObject:testArray forKey:@"testArray"];
    [archiver finishEncoding];
    [data writeToFile:path atomically:YES];

经过测试,我发现上述所有方法都可以正常工作并将相同内容写入文件。

Q1:上述所有方式有何不同?

Q2:我可以第三种方式使用NSData吗?

1 个答案:

答案 0 :(得分:5)

第一个没有让您选择如何处理数据。它会转到一个文件。我使用第二种方法,例如,通过网络连接发送数据。它更灵活。第三种方式做同样的事情,除了你可以把单个对象放入其中。我不确定它是否适用于阵列,但它可能会。它更加灵活,因此您无需准备好阵列或字典。

这就是它。这完全取决于便利与灵活性。