2009-02-26 2 views
4

Ich arbeite an einem Code, der erfordert, dass ich 60 * 4 boolesche Werte speichern, die Titel für diese Werte werden in einem Plist gespeichert. Ich benötige, um die booleschen Werte zur Laufzeit zu manipulieren und konnte keine Möglichkeit finden, die plist-Datei leicht zu aktualisieren. Auch die Verwendung der sqlite-Datenbank zum Speichern der booleschen Werte wird für solch eine große Datenmenge hektisch ... Gibt es einen einfachen Weg durch Welche kann ich einfach speichern und abrufen, sowohl zur Laufzeit als auch nach dem Start der Anwendung?Beste Möglichkeit, um eine große Reihe von booleschen Variablen zu speichern?

+0

Werfen Sie einen Blick auf diese SO-Frage [Kann ein Integer-Array mit NSUserDefaults auf dem iPhone gespeichert werden?] (Http://stackoverflow.com/questions/350848/possible-to-save-an-integer-array-using-) nsuserdefaults-on-iphone) – epatel

Antwort

7

Ich will nicht ein Ketzer sein, aber es gibt eine einfache Regel für Fälle wie diese: vorzeitige Optimierung ist die Wurzel allen Übels.

60 * 4 ist nur 240 booleans. Selbst wenn Sie es irgendwie schaffen, sie auf die schlechteste Art und Weise zu speichern und 1k pro Booleschen Wert zu nehmen, sind das immer noch nur 240k. Solange das Speicher und nicht RAM ist, wen interessiert das? Warum nicht mit dem einfachsten Weg anfangen und es reparieren, wenn etwas später zu dir kommt? SQLite wäre dafür völlig in Ordnung.

Wenn Sie kurz vor dem Versand stehen und dies als Problem erkannt haben, ignorieren Sie diese Antwort auf jeden Fall. :)

+0

Ich muss zustimmen. Sich über 240 Booleans Gedanken zu machen, ist nicht dasselbe wie Sorgen um 240000 Booleans. Sie versuchen, sie zu packen, und der Code zum Entpacken/Entpacken verbraucht mehr Speicherplatz als die Booleschen selbst. – Nosredna

+0

Eigentlich für convience hatten wir es 4 mal, aber es kann auch 100 gehen ... so wird es 60 * 100 also ich suchte nach einem anderen Weg – Snehal

+0

Nun, Speichern von 100 Sätze von 60 booleans (6000 insgesamt) in einem sqlite3-Datenbank mit einem Index und keine Optimierung dauert 150k. Wenn die Sätze immer die gleiche Größe haben, könnten Sie sie als Strings von 60 Bytes (+ Länge) in einzelnen Datensätzen speichern, aber ich denke, sie einzeln zu speichern, ist der bessere Weg zu gehen. –

1

Sie können die NSData Verfahren zum Speichern des boolean-Array verwenden, aber man könnte auch lassen nur Kakao tut es natürlich:

NSArray* arrayOfBools; // array of 240 NSNumbers, each made with [NSNumber numberWithBool:NO]; 

dann

[[NSUserDefaults standardUserDefaults] setObject:arrayOfBools forKey:@"MyNameForThe240"]; 

sie abrufen:

NSArray* savedBools = [[[NSUserDefaults standardUserDefaults] objectForKey:"MyNameForThe240"]; 

Sie werden sie wahrscheinlich in einem veränderbaren Array haben:

NSMutableArray* the240ThatCanBeEdited = [NSMutableArray arrayWithArray:savedBools]; 

Dann verlassen auf, speichern sie aus mit dem

[[NSUserDefaults standardUserDefaults] setObject:the240ThatCanBeEdited forKey:@"MyNameForThe240"]; 
+0

danke ... epatel hat auch gleich vorgeschlagen und ... das scheint eine vernünftige Lösung zu sein ... – Snehal

2

Während seine viel einfacher sein würde NSArray oder NSMutableArray zu verwenden, wie oben erwähnt, Sie bei Verwendung der Standard-C++ Vektor-Klasse aussehen könnte. AFAIK das ist sehr platzsparend. die Zuweisung von Speicher.

Verwandte Themen