Я использую программу NSKeyedArchiver в Mac OS X, которая генерирует данные для приложения iPhone. Я обнаружил, что по умолчанию полученные архивы намного больше, чем я ожидал. Пример:
NSMutableArray * ar = [NSMutableArray arrayWithCapacity:10];
for (int i = 0; i < 100000; i++) {
NSString * s = [NSString stringWithFormat:@"item%06d", i];
[ar addObject:s];
}
[NSKeyedArchiver archiveRootObject:ar toFile: @"NSKeyedArchiver.test"];
Это хранит 10 * 100000 = 1 Мбайт полезных данных, а размер результирующего файла составляет почти три мегабайта. Кажется, что накладные расходы растут с увеличением количества элементов в массиве. В данном случае для 1000 элементов файл был около 22к.
«файл» сообщает, что это «список двоичных свойств Apple» (не формат XML).
Есть ли простой способ предотвратить эти огромные накладные расходы? Я хотел использовать NSKeyedArchiver из-за простоты, которую он обеспечивает. Я могу записывать данные в свой собственный, не универсальный, двоичный формат, но это не очень элегантно. Кроме того, агрегирование данных в большие фрагменты и передача их в NSKeyedArchiver должны работать, но опять же, это не имеет смысла в использовании простого, легкого и готового к использованию архиватора. Я пропустил какой-то вызов метода или шаблон использования, который уменьшил бы эти накладные расходы?