Pregunta

Estoy usando NSKeyedArchiver en Mac OS X programa que genera datos para la aplicación iPhone. Descubrí que, por defecto, los archivos resultantes son mucho más grandes de lo que esperaba. Ejemplo:

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"];

Este tiendas 10 * 100.000 = 1 M bytes de datos útiles, sin embargo, el tamaño del archivo resultante es casi tres megabytes. La cabeza parece estar creciendo con el número de elementos de la matriz. En este caso, por 1000 elementos, el archivo estaba a punto de 22k.

informes "archivo" que es un "Apple lista propiedad binaria" (no el formato XML).

¿Hay una manera simple de evitar que este enorme sobrecarga? Quería utilizar la NSKeyedArchiver por la simplicidad que proporciona. Puedo escribir datos en mi propia no genérico, el formato binario, pero eso no es muy elegante. Además, la agregación de los datos en trozos grandes y la alimentación de éstos a la NSKeyedArchiver debería funcionar, pero una vez más, que un poco mejor que el punto de utilizar simple y fácil y listo para usar archivador. Me estoy perdiendo algo de llamada a un método o patrón de uso que permita reducir esta sobrecarga?

¿Fue útil?

Solución

Me presentó un error al realizar un seguimiento de esto.

Aparte de eso, NSKeyedArchiver está diseñado para archivar las redes de objetos. Al igual que, si un objeto aparece dos veces en el gráfico, en desarchivándolos que todavía encontrará ese es el caso. Probablemente se esté viendo gastos generales para este tipo de uniquing.

Para los datos estructurados jerárquicos en contraposición a las redes de objetos arbitrarios, intente NSPropertyListSerialization. Veo 1,8 MB para un plist binario.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top