Различия с archiveRootObject:toFile: и writeToFile:
недавно я узнал о 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 3-м способом?
1 ответов
первый не дает вам выбора, что делать с данными. Это пойдет в файл. Я использую второй способ, например, для отправки данных через сетевое соединение. Он более гибкий. Третий способ делает то же самое, за исключением того, что вы можете поместить в него отдельные объекты. Я не уверен, что он будет работать с массивом в его нынешнем виде, но это может быть. Он еще более гибкий, поэтому вам не нужно иметь массив или словарь, готовый для него.
Это в значительной степени. Это все о удобстве vs гибкости.