मैं Xcode 4 में NSZombieEnabled की स्थापना कैसे करूँ?


456

मैं कैसे सेट कर सकता हूं NSZombieEnabledऔर CFZombieLevelXcode 4 में मेरी निष्पादन के लिए?


1
क्या आप Xcode 4 के बारे में पूछ रहे हैं?
जियाह

8
इस तरह के विकल्प डिफ़ॉल्ट रूप से सक्षम क्यों नहीं हैं, यह मेरे से परे है ...
डैनियल मैगनसन

26
क्योंकि यह मूल रूप से मेमोरी के किसी भी वास्तविक फ्रीजिंग को रोकता है, जो डिफ़ॉल्ट रूप से सक्षम करने के लिए एक अच्छा विचार नहीं लगता है।
चेतन

14
@ डैनियल मैगनसन: यह एक जीवित रहने वाली सबसे फिट चीज है। XCode के साथ मित्रतापूर्ण लेकिन व्यावहारिक रूप से विकास करने से, आपको बेहतर देव मिलते हैं। मजाक कर रहा हूं।
डैन रोसेनस्टार्क

3
@DanielMagnusson मुझे लगता है कि यह एक बुरा विचार नहीं है, AFAIK "ज़ोंबी" मोड हर वस्तु को एक विशेष प्रकार की ऑब्जेक्ट ऑब्जेक्ट में बदल देगा ताकि यह पता लग सके, जब यह संदेश भेजा जाता है। तो "ज़ोंबी मोड" सक्षम होने का कारण होगा कि किसी भी वस्तु को कभी भी नहीं हटाया जाएगा, इसलिए आपको ऐसी त्रुटियों से निपटने के लिए वास्तव में इसका केवल उपयोग करना चाहिए।
बैसी

जवाबों:


753

Xcode 4.x प्रेस में

R

(या क्लिक Menubar> Product> Scheme> Edit Scheme)

"डायग्नोस्टिक्स" टैब चुनें और "ज़ोंबी ऑब्जेक्ट्स सक्षम करें" पर क्लिक करें:

"ज़ोंबी ऑब्जेक्ट्स सक्षम करें" पर क्लिक करें

यह जारी की गई वस्तुओं को NSZ जॉम्बी इंस्टेंस में बदल देता है जो फिर से उपयोग किए जाने पर कंसोल चेतावनी को प्रिंट करते हैं। यह एक डीबगिंग सहायता है जो मेमोरी उपयोग को बढ़ाती है (कोई वस्तु वास्तव में जारी नहीं होती है) लेकिन त्रुटि रिपोर्टिंग में सुधार करती है।

एक विशिष्ट मामला तब होता है जब आप किसी ऑब्जेक्ट को ओवर-रिलीज़ करते हैं और आपको पता नहीं होता है कि कौन सा है:

  • लाश के साथ: -[UITableView release]: message sent to deallocated instance
  • लाश के बिना: EXC_BAD_ACCESS

जब आप App Store सबमिशन के लिए एप्लिकेशन को संग्रहीत करते हैं तो इस Xcode सेटिंग को अनदेखा कर दिया जाता है। अपने आवेदन को जारी करने से पहले आपको कुछ भी छूने की आवश्यकता नहीं है।

प्रेसिंग Rउत्पाद को चुनने के समान है> Altकुंजी दबाए रखते हुए चलाएँ ।
"ज़ोंबी ऑब्जेक्ट्स सक्षम करें" चेकबॉक्स पर क्लिक करना मैन्युअल रूप से टैब के तर्क के "पर्यावरण चर" अनुभाग में "NSZombieEnabled = YES" को जोड़ने के समान है।


27
धन्यवाद - मैं सोच रहा था कि वे इन विकल्पों को कहाँ छिपाते हैं। अब मुझे लगता है कि यह 'एडिट स्कीम' मेनू की तरह ही विंडो है।
है EMP

1
बस इसे जोड़ने के लिए, इसे "रन" स्क्रीन में करना "टेस्ट" के लिए सेट करता है, साथ ही अगर "रन एक्शन के विकल्पों का उपयोग करें" बॉक्स की जांच की जाती है। यदि आप इसे केवल टेस्ट के लिए करना चाहते हैं, तो उस बॉक्स को अनचेक करने की आवश्यकता है
कैमरून

1
कृपया यह भी ध्यान दें कि यह विकल्प Xcode 4.1 (दाएं?) पर दिखाई देता है
phi

2
XCode 5 (और बाद के संस्करणों के 4 - 4.3.x में यकीन के लिए, शायद पहले), यह है CMD-<( CMD-SHIFT-comma), याProduct -> Scheme -> Edit SCheme...
Olie

1
मैं अजीब EXC_BAD_ACCESS के मुद्दे पर अटका हुआ हूं, यहां तक ​​कि लाश को छोड़ दिया जाता है, यह अच्छा होगा यदि आप मुझे इस stackoverflow.com/questions/29210057/- के
अनूप वैद्य

70

जैनो का जवाब इसे खोजने का सबसे आसान तरीका है .. दूसरा तरीका यह होगा कि आप स्कीम ड्रॉप डाउन बार पर क्लिक करें -> स्कीम को एडिट करें -> आर्ग्युमेंट्स टैब और फिर एनएएसजॉम्बी इनेबल्ड इनवायरमेंटल वेरिएबल्स कॉलम और यस वैल्यू में जोड़ें ...


57

मुझे यह विकल्प अधिक सुविधाजनक लगता है:

  1. "रन बटन ड्रॉपडाउन" पर क्लिक करें
  2. सूची में से चुनें Profile
  3. कार्यक्रम "इंस्ट्रूमेंट्स" खुलना चाहिए जहां आप भी चुन सकते हैं Zombies
  4. अब आप अपने ऐप से बातचीत कर सकते हैं और त्रुटि का कारण बन सकते हैं
  5. जैसे ही त्रुटि होती है आपको अपनी वस्तु जारी होने पर संकेत मिलना चाहिए और इसलिए निपटा दिया जाएगा।

लाश

जैसे ही एक ज़ोंबी का पता लगाया जाता है, तब एक साफ "ज़ोंबी स्टैक" प्राप्त करें जो आपको दिखाता है कि प्रश्न में ऑब्जेक्ट आवंटित किया गया था और इसे कहाँ रखा गया था या जारी किया गया था:

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]

Xcode योजनाओं के नैदानिक ​​टैब का उपयोग करने की तुलना में लाभ :

  1. यदि आप डायग्नोस्टिक टैब में विकल्प को अनचेक करना भूल जाते हैं तो मेमोरी से कोई ऑब्जेक्ट जारी नहीं किया जाएगा।

  2. आपको एक अधिक विस्तृत स्टैक मिलता है जो आपको दिखाता है कि आपकी भ्रष्ट वस्तु को किन तरीकों से आवंटित / जारी किया गया था या बरकरार रखा गया था।


1
मेरे XCode 4 में "लाश" विकल्प गायब है, क्यों?
ली फुमिन

4
सुनिश्चित करें कि आप iOS Simulator > Allमुख्य टेम्प्लेट सूची से चुन रहे हैं (आप केवल सिम्युलेटर में ऐसा कर सकते हैं)
बेसि

किसी कारण के लिए .. अगर मैं 'लाश' का चयन करता हूं तो यह केवल आवंटन दिखाता है .. किसी भी विचार क्यों?
abbood

यह सबसे अच्छा उपाय है। मेरी बहुत मदद की :) :)
मिशैल मिस्ज़ेसिस्ज़िन

5

Xcode 4.2 में

  • परियोजना का नाम / संपादन योजना / निदान /
  • ज़ोंबी ऑब्जेक्ट सक्षम करें चेक बॉक्स
  • हो गया

5

Xcode 7 में

<

या > मेनू Edit Schemeसे चुनेंProductScheme

चयन Enable Zombie Objectsके लिए फार्म Diagnosticsटैब

xcode 7 ज़ोंबी ध्वज

विकल्प के रूप में, यदि आप .xcconfigफाइलें पसंद करते हैं तो आप इस लेख को पढ़ सकते हैं https://therealbnut.wordpress.com/2012/01/01/setting-xcode-4-0-environment-variables-from-a-script/


1

कोको एक शांत सुविधा प्रदान करता है जो ऐसी स्थितियों को डीबग करने के लिए आपकी क्षमताओं को बढ़ाता है। यह एक पर्यावरण चर है जिसे NSZombieEnabled कहा जाता है, इस वीडियो को देखें जो NSZombieEnabled को उद्देश्य-सी में सेट करने के बारे में बताता है।


-1

Xcode में 4.3:

आप स्कीम ड्रॉप डाउन बार -> एडिट स्कीम -> आर्ग्युमेंट्स टैब पर क्लिक करें और फिर एनवायरमेंटल वेरिएबल्स कॉलम में एनजेडइनेबल्ड जोड़ें और वैल्यू कॉलम में YES जोड़ें।

शुभ लाभ !!!

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.