Pergunta

Eu tenho algum código que precisa ser executado quando o aplicativo termina. Registro meu controlador para a NSAPplicationWillMerminatenotification da seguinte maneira:

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

Agora, se eu iniciar meu aplicativo e deixar -o nos primeiros 20 segundos, mais ou menos, applicationWillTerminate é chamado. Se eu desistir do aplicativo mais tarde, não. O que no meu aplicativo poderia causar esse comportamento? Eu também tentei configurar meu controlador como o delegado da NSApplicação com os mesmos resultados. Alguma ideia?

Obrigado.

Ah, e este é o Xcode 3.2, Snow Leopard 10.6.1, usando 10.5 SDK. Acontece nas compilações de depuração e lançamento.

Foi útil?

Solução

Existem várias razões pelas quais isso pode estar acontecendo.

Se você está executando o GC'D, seu observador é coletado e finalizado antes que o término aconteça? (Eu deveria testar isso e arquivar um bug, se isso acontecer, o que pelo menos precisa ser documentado)

Seu aplicativo está travando silenciosamente ou chamando de saída () diretamente?

Em geral, você não pode contar com a notificação de rescisão que está sendo recebida, pois o usuário pode ir para uma força para que ela pare.

Além disso, em Snow Leopard, existe um recurso chamado terminação repentina que permite que seu aplicativo informe o sistema que é seguro matar o aplicativo em vez de passar pela terminação normal Rigamarole. Está documentado no NsprocessInfo documentação.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top