Come faccio a configurare NSZombieEnabled
e CFZombieLevel
per il mio eseguibile in Xcode 4?
Come faccio a configurare NSZombieEnabled
e CFZombieLevel
per il mio eseguibile in Xcode 4?
Risposte:
In Xcode 4.x premere
(o click Menubar
> Product
> Scheme
> Edit Scheme
)
seleziona la scheda "Diagnostica" e fai clic su "Abilita oggetti zombi":
Ciò trasforma gli oggetti rilasciati in istanze NSZombie che stampano gli avvisi della console quando vengono riutilizzati. Questo è un aiuto per il debug che aumenta l'uso della memoria (nessun oggetto è realmente rilasciato) ma migliora la segnalazione degli errori.
Un caso tipico è quando si rilascia un oggetto in eccesso e non si sa quale:
-[UITableView release]: message sent to deallocated instance
Questa impostazione Xcode viene ignorata quando si archivia l'applicazione per l'invio all'App Store. Non è necessario toccare nulla prima di rilasciare l'applicazione.
Premere equivale ⌥⌘Ra selezionare Prodotto> Esegui tenendo Altpremuto il tasto.
Fare clic sulla casella di controllo "Abilita oggetti Zombie" equivale ad aggiungere manualmente "NSZombieEnabled = YES" nella sezione "Variabili d'ambiente" della scheda Argomenti.
CMD-<
( CMD-SHIFT-comma
), oProduct -> Scheme -> Edit SCheme...
La risposta di Jano è il modo più semplice per trovarla. Un altro modo sarebbe se si fa clic sulla barra a discesa dello schema -> modifica schema -> scheda argomenti e quindi si aggiunge NSZombieEnabled nella colonna Variabili d'ambiente e SÌ nella colonna valore ...
Trovo questa alternativa più conveniente:
Profile
Zombies
Non appena viene rilevato uno zombi, otterrai uno "Zombi Stack" ordinato che ti mostra quando l'oggetto in questione è stato allocato e dove è stato conservato o rilasciato:
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]
Vantaggi rispetto all'utilizzo della scheda diagnostica degli schemi Xcode :
Se si dimentica di deselezionare l'opzione nella scheda diagnostica, non verranno rilasciati oggetti dalla memoria.
Ottieni uno stack più dettagliato che ti mostra in quali metodi il tuo oggetto corrotto è stato allocato / rilasciato o mantenuto.
iOS Simulator > All
dall'elenco dei modelli principale (puoi farlo solo nel simulatore)
In Xcode 4.2
oppure seleziona Edit Scheme
da Product
> Scheme
Menu
seleziona Enable Zombie Objects
dalla Diagnostics
scheda
In alternativa, se preferisci i .xcconfig
file puoi leggere questo articolo https://therealbnut.wordpress.com/2012/01/01/setting-xcode-4-0-environment-variables-from-a-script/
Cocoa offre una funzionalità interessante che migliora notevolmente le tue capacità di debug di tali situazioni. È una variabile d'ambiente che si chiama NSZombieEnabled, guarda questo video che spiega come impostare NSZombieEnabled in obiettivo-C
In Xcode> 4.3:
Fare clic sulla barra a discesa dello schema -> modifica schema -> scheda argomenti e quindi aggiungere NSZombieEnabled nella colonna Variabili d'ambiente e SÌ nella colonna valore.
In bocca al lupo !!!