Я использую 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 = 1M байт полезных данных, однако размер получаемого файла составляет почти три мегабайта.Накладные расходы растут с увеличением количества элементов в массиве.В этом случае для 1000 элементов файл был размером около 22 тыс.
«file» сообщает, что это «список двоичных свойств Apple» (не в формате XML).
Есть липростой способ предотвратить эти огромные накладные расходы?Я хотел использовать NSKeyedArchiver для простоты, которую он обеспечивает.Я могу записывать данные в свой собственный, не универсальный, двоичный формат, но это не очень элегантно.Кроме того, агрегация данных в большие порции и подача их в NSKeyedArchiver должна работать, но опять же, это своего рода преимущество простого, удобного и готового к использованию архиватора.Я пропускаю какой-нибудь вызов метода или шаблон использования, который уменьшил бы эти издержки?