2

アプリケーションの終了時に実行する必要があるコードがいくつかあります。次のように、コントローラーを NSApplicationWillTerminateNotification に登録します。

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

これで、アプリを起動して最初の 20 秒以内に終了すると、 applicationWillTerminate呼び出されます。後でアプリケーションを終了しても、終了しません。アプリケーションの何がこの動作を引き起こす可能性がありますか? また、コントローラを NSApplication のデリゲートとして設定しようとしましたが、同じ結果が得られました。何か案は?

ありがとう。

ああ、これは 10.5 SDK を使用した XCode 3.2、Snow Leopard 10.6.1 です。デバッグ ビルドとリリース ビルドの両方で発生します。

4

1 に答える 1

6

これが発生する理由はいくつかあります。

GC を実行している場合、オブザーバーは終了する前に収集され、ファイナライズされますか? (これをテストして、少なくとも文書化する必要がある場合はバグを報告する必要があります)

アプリが静かにクラッシュしたり、直接 exit() を呼び出したりしていませんか?

一般に、ユーザーが強制終了する可能性があるため、終了通知が受信されることを期待することはできません。

また、Snow Leopard には、突然終了と呼ばれる機能があり、通常の終了リガマロールを実行する代わりに、アプリを強制終了しても安全であることをアプリがシステムに知らせることができます。これはNSProcessInfoドキュメントに記載されています。

于 2009-11-05T16:52:23.517 に答える