Domanda

Come faccio a impostare NSZombieEnabled e CFZombieLevel per il mio eseguibile in Xcode 4?

È stato utile?

Soluzione

In Xcode 4.x premere

R

(oppure fare clic su Menubar> Product> Scheme> Edit Scheme)

selezionare la scheda "Diagnostica" e fare clic su "Abilita Zombie Objects":

Fare clic su "Enable Zombie Objects"

Questa giri rilasciati oggetti in istanze NSZombie che stampa gli avvertimenti di console se usato di nuovo. Questo è un aiuto di debug che l'utilizzo della memoria aumenta (nessun oggetto è davvero rilasciato), ma migliora la segnalazione degli errori.

Un caso tipico è quando si over-rilascia un oggetto e non si sa quale:

  • Con zombie: -[UITableView release]: message sent to deallocated instance
  • Senza zombie: EXC_BAD_ACCESS

Questa impostazione Xcode viene ignorata quando si archivia l'applicazione per la presentazione App Store. Non è necessario toccare nulla prima di rilasciare l'applicazione.

Premendo R è lo stesso che la selezione del prodotto> Esegui, mantenendo il kbd> Alt premuto.
Scattare "Enable Zombie Objects" casella è lo stesso di aggiungere manualmente "NSZombieEnabled = SI" nella sezione "Variabili di ambiente" della scheda Argomenti.

Altri suggerimenti

La risposta di Jano è il modo più facile per trovarlo .. un altro modo sarebbe se si fa clic sulla barra di sistema di discesa -> schema di modifica -> scheda argomenti e quindi aggiungere NSZombieEnabled nella colonna variabili di ambiente e SI nella colonna Valore ...

Trovo questa alternativa più conveniente:

  1. Fare clic su "Esegui pulsante a discesa"
  2. Dall'elenco scegliere Profile
  3. Il programma di "strumenti" dovrebbe aprire in cui è possibile anche scegliere Zombies
  4. Ora è possibile interagire con la tua applicazione e cercare di causare l'errore
  5. Non appena l'errore si verifica si dovrebbe ottenere un suggerimento su quando l'oggetto è stato rilasciato e quindi deallocato.

Zombies

Non appena viene rilevato uno zombie si quindi ottenere un pulito "Zombie Stack" che mostra quando l'oggetto in questione è stato assegnato e dove è stato mantenuto 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 al utilizzando la scheda di diagnosi dei piani di Xcode :

  1. Se si dimentica di deselezionare l'opzione nella scheda diagnostica non oggetti saranno rilasciati dalla memoria.

  2. Si ottiene uno stack più dettagliata che mostra in quali metodi l'oggetto danneggiato è stato allocato / rilasciati o mantenuti.

In Xcode 4.2

  • Nome del progetto / Modifica schema / Diagnostica /
  • Abilita Zombie Oggetti casella di controllo
  • Il gioco è fatto

On In Xcode 7

<

o selezionare Edit Scheme da Product> Scheme Menu

selezionare forma Enable Zombie Objects scheda Diagnostics

 Xcode 7 zombie bandiera

In alternativa, se si preferisce file .xcconfig potete leggere questo articolo https://therealbnut.wordpress.com/2012/01/01/setting-xcode-4-0-environment-variables-from-a-script/

Cocoa offre una caratteristica fredda che migliora notevolmente le vostre capacità per eseguire il debug tali situazioni. Si tratta di una variabile d'ambiente che si chiama NSZombieEnabled, guarda questo video che spiega la creazione di NSZombieEnabled in Objective-C

In Xcode> 4.3:

Si fa clic sulla barra di sistema di discesa -> schema di modifica -.> Scheda argomenti e quindi aggiungere NSZombieEnabled nella colonna variabili di ambiente e SI nella colonna Valore

Buona fortuna !!!

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top