Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to add NSDebug.h and use NSZombie in iPhone SDK

I want to enable NSZombies for my iPhone app.

I have read several articles online and I am still unsure of the exact procedure.

I know I have to set the Environment Variables, which I have done:

NSZombieEnabled = YES
NSDebugEnabled = YES
NSDeallocateZombies = NO

I think (I'm not sure), I have to import NSDebug.h. When I check the headers of the Foundation Framework in my project, there is no NSDebug.h.

After some research, I found them in the iPhoneSimulator Foundation Framework. So (and I'm not sure if this is correct), I imported the iPhoneSimualtor Foundation Framework into my project. I noticed that the file STILL does not show up in the project window, even though I can locate it in the Finder.(Is this normal behavior?).

So I opened up main and added:

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

I am not sure if that is right either. After this I still can't get the NSZombie to work (unless I have misunderstood what it is supposed to do) I am expecting to see a log of " NSZombie sent a release... " or something. But I don't see anything

I'm sure I'm just not doing this right, a good step by step would be appreciated. Thanks

Also of note, I have also enabled:

NSMallocStacklLogging = YES
MallocStackLoggingNoCompact = YES
like image 435
Corey Floyd Avatar asked Feb 11 '09 01:02

Corey Floyd


People also ask

How do I enable Nszombie?

You need to open the Product menu in the Xcode, select Edit scheme and then choose the Diagnostics tab. There you have "Enable Zombie Objects".

What is Nszombieenabled?

A global variable related to zombie objects that in practice has no effect.


2 Answers

Are you setting the environment variable correctly? The step by step guide is

  1. Double-click an executable in the Executables group of your Xcode project.
  2. Click the Arguments tab.
  3. In the "Variables to be set in the environment:" section, make a variable called "NSZombieEnabled" and set its value to "YES".

You don't need to #import NSDebug.h

like image 193
Jane Sales Avatar answered Sep 27 '22 21:09

Jane Sales


You don't have to include NSDebug.h or import any special frameworks to use NSZombies. Basically, turn 'em on in your environment variables, and then, if you attempt to message a dealloc'd object, THEN you'll see something in your console, along the lines of:

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

like image 32
Ben Gottlieb Avatar answered Sep 27 '22 19:09

Ben Gottlieb