2009-05-30 11 views
2

Ich habe eine kleine iPhone App, die eine Liste von Objekten speichert. Der Benutzer kann Objekte hinzufügen und entfernen, aber diese Liste bleibt ziemlich klein (die meisten Benutzer würden 10-30 Objekte haben). NSUserDefaults scheint viel einfacher zu arbeiten, aber wird sqlite3 schneller sein? Mit nur 30 "Aufzeichnungen" wird es einen merklichen Unterschied geben?NSUserDefaults vs sqlite3

+0

Core Data ist die beste Option für iPhone OS jetzt. – respectTheCode

Antwort

5

NSUserDefaults ist für Benutzereinstellungen, in der Regel grundlegende Objekte wie NSString oder NSNumber. SQLite, das Serialisieren einer Auflistung von Objekten in einer Eigenschaftsliste oder Core Data sind gültige Optionen zum Speichern von Benutzerdaten, z. B. von Modellobjekten, die Sie erstellt haben.

Sie werden keinen Geschwindigkeitsunterschied sehen, aber es ist immer noch am besten, den richtigen Mechanismus für das zu wählen, was Sie tun. Wenn es nur Einstellungen sind, dann benutze NSUserDefaults, sonst würde ich deine Objekte zu einem Pliste serialisieren. Wenn Sie neu in Cocoa sind, würde ich Core Data und sogar SQLite auf den ersten Blick vermeiden, um eine Chance zu bekommen, die Grundlagen zuerst zu lernen.

+0

Ich bin neu in Cocoa aber nicht Datenbanksysteme. Die meisten Tutorials, die ich gelesen habe, lassen den Eindruck entstehen, dass in den SQL-Statements eine Menge Overhead steckt. Es scheint, als ob der Standard darin besteht, alle Daten beim Start und Cache-Änderungen zu lesen, bis die App beendet wird. – respectTheCode

+0

Ich werde sqlite3 weiter verwenden. Es scheint die logischere Lösung für diese Art von Daten zu sein. – respectTheCode

2

Mit NSCoding-Protokoll versuchen. Erklären Sie Ihre Klasse NSCoding Protokoll zu implementieren:

@interface Person : NSObject <NSCoding> 

zurück Linie verspricht implementieren die folgenden Methoden:

-(id)initWithCoder:(NSCoder *)coder; 
-(void)encodeWithCoder:(NSCoder *)coder; 

Ihre Methoden sollten etwas wie folgt aussehen:

-(void)encodeWithCoder:(NSCoder *)coder { 
    [super encodeWithCoder:coder]; 
    [coder encodeObject:firstName forKey:@"firstName"]; 
    [coder encodeObject:lastName forKey:@"lastName"]; 
} 

-(id)initWithCoder:(NSCoder *)coder { 
    [super init]; 
    firstName = [[coder decodeObjectForKey:@"firstName"] retain]; 
    lastName = [[coder decodeObjectForKey:@"lastName"] retain]; 
    return self; 
} 
+1

Ich werde das für mein nächstes Projekt sehen müssen. – respectTheCode

+2

Dies ist die Antwort für "Wie kann ich Objekte in NSUserDefaults speichern" und nicht die Vorteile der verschiedenen Möglichkeiten diskutieren. –