2009-02-11 8 views
14

Desidero abilitare NSZombies per la mia app per iPhone.Come aggiungere NSDebug.h e utilizzare NSZombie in iPhone SDK

Ho letto diversi articoli online e non sono ancora sicuro della procedura esatta.

so che devo impostare le variabili d'ambiente, che ho fatto:

NSZombieEnabled = YES 
NSDebugEnabled = YES 
NSDeallocateZombies = NO 

penso (non sono sicuro), devo importare NSDebug.h. Quando controllo le intestazioni di Foundation Framework nel mio progetto, non esiste NSDebug.h.

Dopo alcune ricerche, li ho trovati in iPhoneSimulator Foundation Framework. Quindi (e non sono sicuro che sia corretto), ho importato l'iPhoneSimualtor Foundation Framework nel mio progetto. Ho notato che il file STILL non compare nella finestra del progetto, anche se posso trovarlo nel Finder (è normale?).

Così ho aperto principale e ha aggiunto:

#ifdef TARGET_IPHONE_SIMULATOR 
#import <Foundation/NSDebug.h> 
#endif 

Non sono sicuro se questo è giusto sia. Dopo questo, non riesco ancora a far funzionare NSZombie (a meno che non abbia frainteso ciò che si suppone debba fare) Mi aspetto di vedere un log di "NSZombie ha inviato una release ..." o qualcosa del genere. Ma non vedo nulla

Sono sicuro che non sto facendo proprio questo, un buon passo dopo passo sarebbe apprezzato. Grazie

Anche di nota, ho anche attivato:

NSMallocStacklLogging = YES 
MallocStackLoggingNoCompact = YES 
+1

typo su 'NSMallocStackLogging' nell'ultimo blocco di codice – conorgriffin

risposta

10

Non c'è bisogno di includere NSDebug.h o importare qualsiasi dei contesti particolari da usare NSZombies. In sostanza, girare 'em on nelle variabili di ambiente, e poi, se si tenta di messaggio un oggetto dealloc'd, poi vedrete qualcosa nella vostra console, lungo le linee di:

2009-02-10 21:17:08.546 MyApp[16926:20b] *** -[CFString _cfTypeID]: message sent to deallocated instance 0x4babc0

+0

Grazie, pensavo di essere troppo coinvolto in questo. Ho impostato un punto di interruzione a - [NSZombie release]. Sembra essere disabilitato all'avvio dell'esecuzione. È normale? Inoltre, la mia app dovrebbe ancora bloccarsi? Ho pensato che poiché l'oggetto NSZombie era ancora lì, il mio programma continuava ad essere eseguito. Grazie –

+0

Si dovrebbe ricevere un messaggio di console quando QUALSIASI messaggio viene inviato a un NSZombie; Si dovrebbe interrompere automaticamente, nessun punto di interruzione richiesto. –

34

Are stai impostando la variabile di ambiente correttamente? La guida passo passo è

  1. Fare doppio clic su un eseguibile nel gruppo Eseguibili del progetto Xcode.
  2. Fare clic sulla scheda Argomenti.
  3. Nella sezione "Variabili da impostare nell'ambiente:", creare una variabile denominata "NSZombieEnabled" e impostare il suo valore su "SÌ".

Non è necessario a #import NSDebug.h

+0

+1. Ho avuto lo stesso problema di OP e tu mi hai aiutato a trovarlo. Grazie. –

3

-1 ad Apple. Le build di debug dovrebbero essere eseguite con strumentazione completa pronta all'uso (con la possibilità di opt-out). Vedere anche http://www.cocoadev.com/index.pl?NSZombieEnabled per ulteriori informazioni di interesse per chi sta sviluppando e eseguendo il debug di un programma.