Wie meine Frage im obigen Thema sagt, welche Anforderungen müssen Sie normalerweise erfüllen, um zu sagen: "Ok, ich brauche encodeWithCoder:
und initWithCoder:
Instantiierung dafür?" Normalerweise können Sie den Objektstatus in NSUserDefaults
schreiben, also bin ich neugierig, wann entscheiden sich Experten dafür, einen gegen den anderen zu benutzen?
initWithCoder:
wird vom Betriebssystem verwendet, wenn XIB-Dateien nicht archiviert werden; Wenn Sie genau hinsehen, sehen Sie, dass initWithFrame:
nicht für Ansichten aufgerufen wird, die Sie in Ihrem XIB erstellen. Sie werden stattdessen initWithCoder:
aufrufen.
Benutzervorgaben sind im Grunde genommen eine Eigenschaftsliste. Eigenschaftslisten ähneln JSON und können nur bestimmte Datentypen speichern - NSString, NSNumber, NSData, NSDate, NSArray, NSDictionary. Wenn Sie versuchen, etwas anderes in einem Benutzerstandard zu speichern, erhalten Sie eine Ausnahme. Eigenschaftslisten können auch nicht mit beliebigen Objektgraphen, nur Bäumen, umgehen.
Sie können Ihren benutzerdefinierten Status immer verwenden und ihn in eine eigenschaftslistenkompatible Datenstruktur konvertieren und dann in Benutzerstandardeinstellungen speichern. Aber dann implementieren Sie im Grunde einen Objektserialisierungsmechanismus, und Sie können auch den leistungsfähigeren verwenden, der bereits von NSArchiver bereitgestellt wird.
NSCoder
ist die Cocoa-Standardmethode zum Implementieren der Serialisierung. Weitere Informationen finden Sie in Apples Archivierungs- und Serialisierungsleitfaden für Cocoa .
Ich gehe mit NSCoder immer dann, wenn ich irgendwelche komplizierten Daten zum Speichern habe, die ich nie von Hand bearbeiten muss. Zum Beispiel speichert meine App Converter aus dem Internet heruntergeladene Wechselkurse in einem NSCoder-Archiv. Dies ist jedoch das einzige, was es in einem solchen Archiv behält: Einheitsdefinitionen, die nur von Hand verändert werden, werden in einer Reihe von Plist-Dateien im Anwendungspaket gespeichert, und Dinge wie die zuletzt ausgewählten Einheiten und Werte werden beibehalten NSUserDefaults.
Tags und Links objective-c iphone cocoa-touch initwithcoder