2009-05-30 10 views
2

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

+0

Core Data est la meilleure option pour iPhone OS maintenant. – respectTheCode

Répondre

5

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.

+0

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

+0

Je vais juste continuer à utiliser sqlite3. Cela semble être la solution la plus logique pour ce type de données. – respectTheCode

2

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; 
} 
+1

Je devrai me pencher là-dessus pour mon prochain projet. – respectTheCode

+2

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. –