2009-11-05 5 views
1

J'ai du code qui doit être exécuté lorsque l'application se termine. Enregistrer mon contrôleur pour le NSApplicationWillTerminateNotification comme suit:NSApplicationWillTerminateNotification non reçu

[[NSNotificationCenter defaultCenter] 
    addObserver: self 
     selector: @selector(applicationWillTerminate:) 
      name: NSApplicationWillTerminateNotification 
     object: nil]; 

Maintenant, si je commence mon application et le quitte dans les 20 premières secondes environ, applicationWillTerminate est appelée. Si je quitte l'application plus tard, ce n'est pas le cas. Que dans mon application pourrait provoquer ce comportement? J'ai également essayé de configurer mon contrôleur en tant que délégué de NSApplication avec les mêmes résultats. Des idées?

Merci.

Oh, et voici XCode 3.2, Snow Leopard 10.6.1, utilisant 10.5 SDK. Happens dans les versions Debug et Release.

Répondre

5

Plusieurs raisons peuvent expliquer cette situation.

Si vous utilisez GC'd, votre observateur est-il collecté et finalisé avant que la résiliation ne se produise? (Je devrais tester ceci et classer un bogue si c'est le cas car cela doit au moins être documenté)

Votre application se bloque-t-elle silencieusement ou appelle-t-elle directement exit()?

En général, vous ne pouvez pas compter sur la réception de la notification de résiliation, car l'utilisateur peut demander l'abandon d'une force. De plus, dans Snow Leopard, il existe une fonctionnalité appelée terminaison soudaine qui permet à votre application de faire savoir au système qu'il est sûr de tuer l'application au lieu de passer par la terminaison normale rigamarole. Il est documenté dans la documentation NSProcessInfo.

+0

Oui, ce comportement a été provoqué par la fonctionnalité 'arrêt soudain'. J'avais NSSupportsSuddenTermination activé dans mon Info.plist. Merci beaucoup! – svintus

Questions connexes