How do I set up NSZombieEnabled in Xcode 4?
Solution 1
In Xcode 4.x press
⌥⌘R
(or click Menubar
> Product
> Scheme
> Edit Scheme
)
select the "Diagnostics" tab and click "Enable Zombie Objects":
This turns released objects into NSZombie instances that print console warnings when used again. This is a debugging aid that increases memory use (no object is really released) but improves error reporting.
A typical case is when you over-release an object and you don't know which one:
- With zombies:
-[UITableView release]: message sent to deallocated instance
- Without zombies:
This Xcode setting is ignored when you archive the application for App Store submission. You don't need to touch anything before releasing your application.
Pressing ⌥⌘R is the same as selecting Product > Run while keeping the Alt key pressed.
Clicking the "Enable Zombie Objects" checkbox is the same as manually adding "NSZombieEnabled = YES" in the section "Environment Variables" of the tab Arguments.
Solution 2
Jano's answer is the easiest way to find it.. another way would be if you click on the scheme drop down bar -> edit scheme -> arguments tab and then add NSZombieEnabled in the Environment Variables column and YES in the value column...
Solution 3
I find this alternative more convenient:
- Click the "Run Button Dropdown"
- From the list choose
Profile
- The program "Instruments" should open where you can also choose
Zombies
- Now you can interact with your app and try to cause the error
- As soon as the error happens you should get a hint on when your object was released and therefore deallocated.
As soon as a zombie is detected you then get a neat "Zombie Stack" that shows you when the object in question was allocated and where it was retained or released:
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]
Advantages compared to using the diagnostic tab of the Xcode Schemes:
If you forget to uncheck the option in the diagnostic tab there no objects will be released from memory.
You get a more detailed stack that shows you in what methods your corrupt object was allocated / released or retained.
Solution 4
In Xcode 4.2
- Project Name/Edit Scheme/Diagnostics/
- Enable Zombie Objects check box
- You're done
Solution 5
On In Xcode 7
⌘<
or select Edit Scheme
from Product
> Scheme
Menu
select Enable Zombie Objects
form the Diagnostics
tab
As alternative, if you prefer .xcconfig
files you can read this article https://therealbnut.wordpress.com/2012/01/01/setting-xcode-4-0-environment-variables-from-a-script/
Chetan
Generalist software engineer with 10 years of experience shipping products featured by Apple and Google, ranging from full-stack mobile and web development, game development, UI / UX design, and AI / machine learning.
Updated on January 18, 2020Comments
-
Chetan over 4 years
How do I set up
NSZombieEnabled
andCFZombieLevel
for my executable in Xcode 4?