La gestion de la persistance ne doit pas être liée à dealloc
. Si vous souhaitez enregistrer l'état de l'objet, vous devez avoir un objet de session qui collecte les objets sales et enregistre les modifications de temps en temps ou lorsque l'application se termine en arrière-plan.
Un exemple utilisant les paramètres d'application: Supposons que vous ne souhaitiez pas utiliser NSUserDefaults
pour les paramètres de votre application, peut-être parce que vous avez une logique supplémentaire à faire. Vous avez une classe Settings
qui conserve tous les paramètres et vous souhaitez évidemment conserver les modifications persistantes.
Vous pouvez placer toute la logique de persistance dans la classe Settings
, mais cela viole le principe de la responsabilité unique. (= Il y a de bonnes raisons pour que cela vous cause de la douleur.) Donc, vous pouvez ajouter une classe Session
qui prendra de la persistance des changements effectués dans Settings
.
Lorsque l'application démarre, vous allez créer une instance de la Session
et demander Settings
:
Session *session = [[Session alloc] init];
Settings *settings = [session loadSettings];
Maintenant, s'il y a un fichier sur le disque qui contient les paramètres enregistrés, la session se charge (ce qui est simple, car la classe Settings
implémente NSCoding
). Si ce n'est pas le cas, la session créera une nouvelle instance Settings
et la renverra. En outre, la session commencera probablement à surveiller les modifications dans l'instance Settings
renvoyée, par exemple en utilisant NSNotificationCenter
. (Il est tout à fait naturel qu'un objet Settings
tireraient une notification lorsque les paramètres changent.)
Maintenant, quand vous changez quelque chose dans une instance Settings
que vous avez obtenu de la session, la session remarquerez que et il enregistre les modifications apportées à disque. Ce qui devrait être trivial, puisque Settings
mettre en œuvre NSCoding
. Vous pouvez également marquer l'objet comme sale et enregistrer uniquement les modifications toutes les quelques secondes, ce qui est une meilleure solution dans le cas où vous mettez à jour l'objet assez fréquemment. Dans ce cas, vous pouvez également forcer la sauvegarde de la session lorsque l'application va se terminer ou passera en arrière-plan.
Je ne dis pas que ce scénario est parfait, mais il est certainement mieux que les objets qui s'obstinent à dealloc :-)
Vous pouvez utiliser NSLog sur la fin et lire le journal après l'application a été terminée pour vérifier si il passe le methos dealloc ou pas. – infinity