Como configuro NSZombieEnabled
e CFZombieLevel
para o meu executável no Xcode 4?
Como configuro NSZombieEnabled
e CFZombieLevel
para o meu executável no Xcode 4?
Respostas:
No Xcode 4.x, pressione
(ou clique em Menubar
> Product
> Scheme
> Edit Scheme
)
selecione a guia "Diagnóstico" e clique em "Ativar objetos zumbis":
Isso transforma objetos liberados em instâncias do NSZombie que imprimem avisos do console quando usados novamente. Este é um auxiliar de depuração que aumenta o uso da memória (nenhum objeto é realmente lançado), mas melhora o relatório de erros.
Um caso típico é quando você libera um objeto em excesso e não sabe qual:
-[UITableView release]: message sent to deallocated instance
Essa configuração do Xcode é ignorada quando você arquiva o aplicativo para 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 Alttecla pressionada.
Clicar na caixa de seleção "Ativar objetos zumbis" é o mesmo que adicionar manualmente "NSZombieEnabled = YES" na seção "Variáveis de ambiente" da guia Argumentos.
CMD-<
( CMD-SHIFT-comma
), ouProduct -> Scheme -> Edit SCheme...
A resposta de Jano é a maneira mais fácil de encontrá-lo. Outra maneira seria se você clicar na barra suspensa do esquema -> editar esquema -> guia argumentos e depois adicionar NSZombieEnabled na coluna Variáveis de ambiente e YES na coluna Valor ...
Acho essa alternativa mais conveniente:
Profile
Zombies
Assim que um zumbi é detectado, você recebe uma "Pilha de zumbis" que mostra quando o objeto 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 ao uso da guia de diagnóstico dos esquemas Xcode :
Se você esquecer de desmarcar a opção na guia Diagnóstico, nenhum objeto será liberado da memória.
Você obtém uma pilha mais detalhada que mostra em quais métodos seu objeto corrompido foi alocado / liberado ou retido.
iOS Simulator > All
a partir da lista de modelos principal (Você só pode fazer isso no simulador)
No Xcode 4.2
ou selecione Edit Scheme
em Product
> Scheme
Menu
selecione Enable Zombie Objects
a Diagnostics
aba
Como alternativa, se você preferir .xcconfig
arquivos, pode ler este artigo https://therealbnut.wordpress.com/2012/01/01/setting-xcode-4-0-environment-variables-from-a-script/
O cacau oferece um recurso interessante que aprimora muito seus recursos para depurar essas situações. É uma variável de ambiente chamada NSZombieEnabled, assista a este vídeo que explica a configuração do NSZombieEnabled no objetivo-C
No Xcode> 4.3:
Você clica na barra suspensa do esquema -> editar esquema -> guia argumentos e adiciona NSZombieEnabled na coluna Variáveis de ambiente e YES na coluna Valor.
Boa sorte !!!