与archiveRootObject:toFile:和writeToFile的区别:

kuk*_*shi 9 objective-c nskeyedarchiver ios

最近,我正在学习NSKeyedArchiver和NSKeyedUnarchiver.我发现有三种方法来存档数组,我试图找出差异.

1.使用 archiveRootObject:toFile:

    [NSKeyedArchiver archiveRootObject:testArray toFile:filePath];
Run Code Online (Sandbox Code Playgroud)

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

    NSData *data = [NSKeyedArchiver archivedDataWithRootObject:testArray];
    [data writeToFile:filePath atomically:YES];
Run Code Online (Sandbox Code Playgroud)

3.使用encodeObject:获取数据

    NSMutableData *data = [NSMutableData data];
    NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data];
    [archiver encodeObject:testArray forKey:@"testArray"];
    [archiver finishEncoding];
    [data writeToFile:path atomically:YES];
Run Code Online (Sandbox Code Playgroud)

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

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

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

bor*_*den 5

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

这就是它.这完全是为了方便与灵活.