2014-04-11 8 views
6

Beim Speichern kleiner Datenmengen aus meiner App ist es besser NSUserDefaults oder NSCoding zu verwenden? Jetzt verwende ich NSCoding (encodeWithCoder/initWithCoder, etc.) aber es scheint, dass NSUserDefaults einfacher sein könnte. Meine Gesamtdaten beziehen sich auf eine Vielzahl von Inten/Strings/MutableArray, nur etwa ein paar Dutzend insgesamt.NSUserDefaults vs NSCoding

+1

Du vergleichst Äpfel mit Orangen erstellt wird. Sie könnten NSCoding verwenden, um etwas in NSUserDefaults zu speichern. Welchen Kontrast möchten Sie also zeichnen? – matt

+0

Es klingt wie, was Sie wollen, ist 'NSPropertyListSerialization'. – iluvcapra

+1

Weiter wurde Matt gesagt, NSCoding ist überhaupt kein Speichermechanismus. Was machst du mit deinen verschlüsselten Daten? Das sollten Sie mit NSUserDefaults vergleichen. – rmaddy

Antwort

4

Ich nehme an, dass Sie unter NSCoding meinen "Speichern von Objekten in Dateien nach dem Serialisieren von ihnen mit NSCoding APIs". Obwohl beide Ansätze für primitive Datentypen gelten, wird die Methode NSUserDefaults schwieriger, wenn Sie Objekte mit komplexen Strukturen serialisieren.

Im Gegensatz dazu bietet das Speichern von Daten der Klassen NSCoding in Dateien eine hohe Flexibilität in Bezug auf die Objektstruktur. Wenn Sie wissen, dass Sie diese Flexibilität in Zukunft nicht benötigen, gehen Sie mit NSUserDefaults; Wenn Sie nicht sicher sind, bleiben Sie bei den Dateien.

+0

Ja, Ihre Annahme ist richtig (meine Frage hätte klarer formuliert werden sollen). Ich bleibe bei der NSCoding/Datei-Methode, da es bereits funktioniert. Vielen Dank. – wayneh

0

Es ist meine Präferenz eine plist-Datei zu verwenden, die programmatisch

NSString *appFile; 
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentsDirectory = [paths objectAtIndex:0]; 
    appFile = [documentsDirectory stringByAppendingPathComponent:@"myFile"]; 
    //this creates the file path 


    NSDictionary* tempDict = [[NSDictionary alloc]initWithContentsOfFile:appFile]; 
    //this gets the data from storage 

    [tempDict writeToFile:appFile atomically:YES]; 
    //this updates the data to storage