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
Antwort
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.
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
Ich werde sqlite3 weiter verwenden. Es scheint die logischere Lösung für diese Art von Daten zu sein. – respectTheCode
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;
}
Ich werde das für mein nächstes Projekt sehen müssen. – respectTheCode
Dies ist die Antwort für "Wie kann ich Objekte in NSUserDefaults speichern" und nicht die Vorteile der verschiedenen Möglichkeiten diskutieren. –
- 1. NSUserDefaults vs NSCoding
- 2. SQLite3 Abfrageoptimierung Join vs Subselect
- 3. Core Data vs NSUserDefaults für eingeloggte Benutzerdaten
- 4. iOS: Geschwindigkeit des Lesens NSUserDefaults vs Variablen
- 5. Tokyo Cabinet vs SQLite3 auf iPhone
- 6. Speichern von Authentifizierungs-Tokens auf iOS - NSUserDefaults vs Keychain?
- 7. NSUserDefaults: Dumping der Struktur von NSUserDefaults standardUserDefaults
- 8. NSUserDefaults Initialisierer
- 9. NSUserDefaults Leistungsvergleich
- 10. NSUserDefaults removeObjectForKey
- 11. NSUserDefaults Leistungsprobleme
- 12. NSUserDefaults unzuverlässig?
- 13. Neben sqlite3, CoreData und NSUserDefaults, was sind die am einfachsten zu handhabenden Datenpersistenztechniken in iPhone OS?
- 14. sqlite3.dll und system.data.sqlite.dll
- 15. NSUserDefaults nicht sparend richtig
- 16. aktualisieren NSUserDefaults Nested Wörterbuch
- 17. Swift NSUserDefaults setString: forKey :?
- 18. NSUserDefaults auf Festplatte schreiben?
- 19. Verwenden ich NSUserDefaults falsch?
- 20. auf NSUserDefaults stecken
- 21. NSDictionary in NSUserDefaults speichern
- 22. NSUserDefaults mit Facebook Login
- 23. Swift Label.text = NSUserDefaults
- 24. Ist NSUserDefaults threadsafe
- 25. NSUserDefaults: Erkennen nil
- 26. NSUserDefaults verursacht App ablehnen
- 27. NSUserDefaults nicht speichern
- 28. NSUserDefaults in iOS-Spielplatz
- 29. Speichern UIPrinter zu NSUserDefaults
- 30. Wie mit NSUserDefaults testen?
Core Data ist die beste Option für iPhone OS jetzt. – respectTheCode