Я использую NSKeyedArchiver в Mac OS X, которая генерирует данные для приложения iPhone. Я узнал, что по умолчанию полученные архивы намного больше, чем я ожидал. Пример:NSKeyedArchiver на NSArray имеет накладные расходы большого размера
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 элементов файл был около 22k.
«файл» сообщает, что это «список двоичных свойств Apple» (а не формат XML).
Есть ли простой способ предотвратить эти огромные накладные расходы? Я хотел использовать NSKeyedArchiver для простоты, которую он предоставляет. Я могу записывать данные в свой собственный, не общий, двоичный формат, но это не очень элегантно. Кроме того, сбор данных на большие куски и их подача в NSKeyedArchiver должен работать, но опять-таки, это своего рода попытка использовать простой & простой & готовый к использованию архиватор. Не хватает ли метода вызова метода или шаблона использования, который уменьшил бы эти накладные расходы?
Спасибо 8) Вы правы, plist должен сделать трюк. Я забыл, что у него также есть двоичный формат. – BobK