J'ai une petite application iPhone qui stocke une liste d'objets. L'utilisateur peut ajouter et supprimer des objets, mais cette liste restera relativement petite (la plupart des utilisateurs auront entre 10 et 30 objets). NSUserDefaults
semble beaucoup plus facile à travailler avec, mais sera sqlite3
être plus rapide? Avec seulement 30 enregistrements, y aura-t-il une différence notable?NSUserDefaults vs sqlite3
Répondre
NSUserDefaults est pour les préférences de l'utilisateur, généralement des objets de base comme NSString ou NSNumber. Sqlite, la sérialisation d'une collection d'objets dans une liste de propriétés, ou les données de base sont toutes des options valides pour stocker des données utilisateur telles que les objets de modèle que vous avez créés.
Vous n'allez pas voir une différence de vitesse, mais il est toujours préférable de choisir le bon mécanisme pour ce que vous faites. Si ce n'est que des préférences, utilisez NSUserDefaults, sinon je sérialiserais vos objets en plist. Si vous êtes nouveau sur Cocoa, j'éviterais Core Data et même sqlite au début, pour vous donner une chance d'apprendre les bases en premier.
Je suis nouveau sur Cocoa mais pas sur les systèmes de bases de données. La plupart des tutoriels que j'ai lus donnent l'impression qu'il y a beaucoup de frais généraux dans les instructions sqlite. Il semble que la norme est de lire toutes les données au lancement et les changements de cache jusqu'à ce que l'application soit terminée. – respectTheCode
Je vais juste continuer à utiliser sqlite3. Cela semble être la solution la plus logique pour ce type de données. – respectTheCode
Essayez le protocole NSCoding. Déclarez votre classe pour mettre en œuvre le protocole NSCoding:
@interface Person : NSObject <NSCoding>
ligne précédente promet de mettre en œuvre les méthodes suivantes:
-(id)initWithCoder:(NSCoder *)coder;
-(void)encodeWithCoder:(NSCoder *)coder;
Vos méthodes devrait ressembler à:
-(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;
}
Je devrai me pencher là-dessus pour mon prochain projet. – respectTheCode
C'est la réponse pour "Comment puis-je sauvegarder des objets sur NSUserDefaults" et ne pas discuter des avantages des différentes possibilités. –
- 1. iPhone NSUserDefaults
- 2. NSUserDefaults n'épargnent pas correctement
- 3. Comment sécuriser NSUserDefaults?
- 4. NSUserDefaults: plantage de setObject
- 5. SQLite3 - Impossible Open Database
- 6. sqlite3 en Python
- 7. Objet SQLite3 non compris?
- 8. Optimiser SQLite3 sur iPhone
- 9. Sqlite3 utilisant dans l'iPhone
- 10. Snow Leopard, sqlite3-ruby
- 11. Enregistrement d'une liste de contacts dans NSUserDefaults
- 12. Devrais-je m'inquiéter des collisions dans NSUserDefaults?
- 13. Enregistrer les entités CoreData dans NSUserDefaults
- 14. PHP - PDO Instructions SQLite3 Prepared
- 15. Comment débloquer un sqlite3 db?
- 16. comment activer sqlite3 pour php?
- 17. Rails & SQLite3: Date Mis-Match
- 18. Installer sqlite3 sur mac osx?
- 19. Problème avec SQLite3 sous VC9
- 20. Cocoa - Notification sur le changement de valeur NSUserDefaults?
- 21. Les objets retournés par NSUserDefaults doivent être libérés ou non
- 22. iPhone SDK NSUserDefaults ne pas enregistrer les valeurs correctes
- 23. sqlite3 encart en vrac de C?
- 24. problème iPhone SQLite3 - "Une telle colonne"
- 25. iPhone + sqlite3 + pas dans la requête
- 26. Sqlite3 insensible aux diacritiques iphone de recherche
- 27. installe sqlite3 sur mac os x?
- 28. Mise à jour de l'API sqlite3
- 29. Ouvert SQLite3 comme READONLY avec PDO?
- 30. Sqlite3 classe de connexion pour iPhone SDK
Core Data est la meilleure option pour iPhone OS maintenant. – respectTheCode