Ich lade von NSUserDefaults in meinem Objekt init-Methode. Kann ich in der Dealloc-Methode meines Objekts in NSUserDefaults speichern? genauIst es eine schlechte Form, NSUserDefaults in - (void) dealloc zu synchronisieren?
etwas wie:
-(void)dealloc {
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
[userDefaults setObject:self.filenamesArray forKey:self.defaultsKey];
[userDefaults synchronize];
self.filenamesArray = nil;
self.defaultsKey = nil;
[super dealloc];
}
gut, schlecht, ok? wenn es nicht gut ist, wo wäre es besser.
Bearbeiten:
Vielen Dank für die detaillierten Antworten. All diese Dinge ergeben Sinn. Ein weiterer Grund, warum ich herausgefunden habe, dass dies ein schlechter Platz zum Speichern von Benutzereinstellungen ist, besteht darin, dass Dealloc nur aufgerufen wird, wenn ein Objekt gut zugeordnet wird. Wenn meine App beendet wird, wird dieser Code nie ausgeführt. Wenn die App in den Hintergrund geschaltet wird (iOS 4), wird dies nicht ausgeführt. Ich habe auch den expliziten Aufruf [userDefaults synchronize]
entfernt. Es macht mich ein wenig nervös, aber ich vertraue diesem Apfel auf Apfel. :)
ich mit Jared zustimmen, 'synchronize' sollte nur verwendet werden, um„Kraft "Synchronisierung. Dies kann zum Beispiel beim Debuggen nützlich sein, und es besteht die Möglichkeit eines Absturzes usw. – mohsenr
Ich kann mich nicht erinnern, dass jemand -dealloc als "magisch" präsentiert hat. Der Punkt ist, dass es in der Regel schlecht ist, besonders weil dieser Teil Ihres Objektgraphen abgerissen wird. Wenn Sie etwas anderes als das Abmelden tun (z. B. das Entfernen von Selbst aus einem Benachrichtigungscenter usw.), wird ein weiterer Bereich Ihrer Anwendung erstellt, der sich möglicherweise mit der Komplexität Ihrer Klasse verben könnte. Vor allem, wenn Sie schwache Referenzen zu anderen Objekten betrachten, die möglicherweise bereits durch die Zeit, zu der das Objekt -dealloc aufgerufen wird, auf Wiedersehen gegangen sind. Der Code, wie er jetzt aussieht, sieht harmlos aus, aber das könnte sich leicht ändern. –
Das oben Gesagte (kein Platz mehr), ich stimme zu, dass der Aufruf zu -synchronize unnötig ist, aber das Festlegen der Benutzereinstellungen ist, was ich hauptsächlich das Problem habe. Das OP ruft nicht nur das Synchronisieren auf, sondern wartet darauf, die Standardeinstellungen während eines Dealloc-Aufrufs festzulegen. Ich habe den Wortlaut meiner ursprünglichen Antwort geändert, um diese Unterscheidung widerzuspiegeln. –