Como configuro o NSZombieEnabled no Xcode 4?

Como faço para configurar NSZombieEnabled e CFZombieLevel para meu executável no Xcode 4?

No Xcode 4.x pressione

R

(ou clique em Menubar menu> Product > Scheme > Edit Scheme )

selecione a aba “Diagnostics” e clique em “Enable Zombie Objects”:

Clique em

Isso transforma objects liberados em instâncias do NSZombie que imprimem avisos do console quando usados ​​novamente. Esta é uma ajuda de debugging que aumenta o uso de memory (nenhum object é realmente liberado), mas melhora o relatório de erros.

Um caso típico é quando você libera um object em excesso e não sabe qual deles:

  • Com zumbis: -[UITableView release]: message sent to deallocated instance
  • Sem zumbis: EXC_BAD_ACCESS

Essa configuração do Xcode é ignorada quando você arquiva o aplicativo para o envio da App Store. Você não precisa tocar em nada antes de liberar seu aplicativo.

Pressionar ⌥⌘R é o mesmo que selecionar Produto> Executar enquanto mantém a tecla Alt pressionada.
Clicar na checkbox de seleção “Ativar objects zumbis” é o mesmo que adicionar manualmente “NSZombieEnabled = YES” na seção “Variáveis ​​de ambiente” da guia Argumentos.

A resposta de Jano é a maneira mais fácil de encontrá-lo … outra maneira seria se você clicasse na barra suspensa de esquema -> esquema de edição -> guia de argumentos e então adicionasse NSZombieEnabled na coluna Variáveis ​​de Ambiente e YES na coluna de valor …

Eu acho essa alternativa mais conveniente:

  1. Clique no botão “Executar o menu suspenso”
  2. Na lista, escolha Profile
  3. O programa “Instrumentos” deve abrir onde você também pode escolher Zombies
  4. Agora você pode interagir com seu aplicativo e tentar causar o erro
  5. Assim que o erro acontecer, você deverá obter uma dica sobre quando seu object foi liberado e, portanto, desalocado.

Zumbis

Assim que um zumbi é detectado, você recebe uma “Pilha de Zumbis” que mostra quando o object em questão foi alocado e onde foi retido ou liberado:

 Event Type RefCt Responsible Caller Malloc 1 -[MyViewController loadData:] Retain 2 -[MyDataManager initWithBaseURL:] Release 1 -[MyDataManager initWithBaseURL:] Release 0 -[MyViewController loadData:] Zombie -1 -[MyService prepareURLReuqest] 

Vantagens em comparação com o uso da guia de diagnóstico dos Xcode Schemes :

  1. Se você esquecer de desmarcar a opção na guia de diagnóstico, nenhum object será liberado da memory.

  2. Você obtém uma pilha mais detalhada que mostra em quais methods seu object corrompido foi alocado / liberado ou retido.

No Xcode 4.2

  • Nome do Projeto / Esquema de Edição / Diagnóstico /
  • Ativar checkbox de seleção Objetos zumbis
  • Você está feito

No Xcode 7

<

ou selecione Edit Scheme no Product > Menu Scheme

selecione Enable Zombie Objects na guia Diagnostics

xcode 7 zombie flag

Como alternativa, se você preferir arquivos .xcconfig você pode ler este artigo https://therealbnut.wordpress.com/2012/01/01/setting-xcode-4-0-environment-variables-from-a-script/

O Cocoa oferece um recurso interessante que aprimora muito sua capacidade de depurar situações desse tipo. É uma variável de ambiente que é chamada NSZombieEnabled, assista a este vídeo que explica a configuração do NSZombieEnabled no objective-C

No Xcode> 4.3:

Você clica na barra suspensa do esquema -> esquema de edição -> guia argumentos e, em seguida, adiciona NSZombieEnabled na coluna Variáveis ​​de ambiente e YES na coluna de valor.

Boa sorte !!!