dealloc() non exécuté
fleurantin
Membre
Bonjour,
J'inscris certains de mes objets au centre de notification dans init ou awakeFromNib et cela fonctionne bien.
Je souhaite les désinscrire avant leur disparition (sinon à la prochaine notification => boom). Pour cela je souhaite utiliser la fonction dealloc de l'objet.
J'ai placé un breakpoint dans le dealloc des objets. Mais la fonction n'est pas appelée. Et il me semble que c'est ainsi pour tous mes objets, l'application n'y passe pas !!
Je précise que ARC n'est pas actif.
Une idée ?
Merci à tous.
J'inscris certains de mes objets au centre de notification dans init ou awakeFromNib et cela fonctionne bien.
Je souhaite les désinscrire avant leur disparition (sinon à la prochaine notification => boom). Pour cela je souhaite utiliser la fonction dealloc de l'objet.
J'ai placé un breakpoint dans le dealloc des objets. Mais la fonction n'est pas appelée. Et il me semble que c'est ainsi pour tous mes objets, l'application n'y passe pas !!
Je précise que ARC n'est pas actif.
Une idée ?
Merci à tous.
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Soit tu es à la fermeture de l'application et c'est tout à fait normal. Lorsqu'une application Cocoa est fermé, les message de fin d'application sont envoyé pour effectuer les sauvegardes mais aucun objet ne recevra le dealloc. Une fois que tous les objets ont répondu aux message de fin d'application la mémoire de l'application est juste dégagé sans que les dealloc soient fait.
C'est une question d'optimisation. Dans le dealloc ne doit se trouver que la libération mémoire, le cycle de vie de l'application et des objets propose d'autres étapes pour sauvegarder les données par exemple.
Concernant ton cas de notification, si c'est l'arrêt des notif en fin d'application, tu t'en fou donc. Si c'est en milieu de vie, c'est que tu n'as pas fait suffisamment de release.
Cependant j'utilise le NSPersistentDocument de Cocoa sans avoir rien modifié du fonctionnement et si je ferme l'unique fenêtre du document il n'y a pas de passage dans le dealloc que j'ai simplement implémenté ainsi :
Je n'ai pas fait de retain ou release au NSPersistentDocument.
Tu as raison.
Mon Document était en @property d'un autre objet en mode retain.
Une fois passé en assign pas de problème.
Le reste doit être du même acabit.
Encore merci pour tes conseils.
Par ce qu'on est dans une application document-based ?
Parfait :-)
Je connais pas trop le développement MacOSX. Je croyais justement qu'on pouvait ouvrir plusieurs fenêtres sur un document. Du coup je ne voyais pas pourquoi la fermeture d'une fenêtre devait fermer un document.
Si un document a plusieurs fenêtres d'ouvertes, celui-ci est releasé lors de la fermeture de la dernière fenêtre.
Il est possible de désigner une fenêtre principale (généralement celle ouverte à la création du document) :
Ainsi la fermeture de la fenêtre principale entrainera la fermeture de toutes les fenêtres associées à ce document.