Frage

Ich verwende NSKeyedArchiver in Mac OS X-Programm, das Daten für die iPhone-Anwendung erzeugt. Ich fand heraus, dass standardmäßig resultierende Archive sind viel größer als ich erwartet hatte. Beispiel:

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

Diese speichert 10 * 100000 = 1M von Nutzdaten-Bytes, aber die Größe der resultierenden Datei ist fast drei Megabyte. Der Overhead scheint mit der Anzahl der Elemente im Array zu wachsen. In diesem Fall für 1000 Elemente, war die Datei über 22k.

"Datei" berichtet, dass es eine "Apple-binäre Eigenschaftsliste" ist (nicht das XML-Format).

Gibt es eine einfache Möglichkeit, diesen großen Aufwand zu verhindern? Ich wollte die NSKeyedArchiver für die Einfachheit verwenden, die es bietet. Ich kann Daten zu meiner eigenen, nicht-generic, Binärformat schreiben, aber das ist nicht sehr elegant. Auch Aggregation der Daten in große Stücke und diese an den NSKeyedArchiver Fütterung sollte funktionieren, aber auch hier, dass ein bisschen schlägt den Punkt mit einfachen und leicht und gebrauchsfertig Archivierungs. Bin ich etwas Methodenaufruf oder Nutzungsmuster fehlt, die diesen Aufwand reduzieren würde?

War es hilfreich?

Lösung

reichte ich einen Fehler, dies zu verfolgen.

Abgesehen davon, ist NSKeyedArchiver entworfen für Netzwerke Objekt Archivierung. Wie, wenn ein Objekt zweimal in der Grafik angezeigt wird, auf dearchiviert werden Sie immer noch feststellen, dass der Fall ist. Du bist wahrscheinlich Aufwand für diese Art von uniquing zu sehen.

Für hierarchisch strukturierte Daten als auf beliebige Objektnetze im Gegensatz versuchen NSPropertyListSerialization. Ich sehe 1,8MB für ein binäres plist.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top