मैंने सुझाव दिया है कि डिबगिंग करते समय सेट NSZombieEnabledकरने के लिए सुझाव दें true। NSZombie क्या है? क्या यह एक ढांचा है? एक सेटिंग?
मैंने सुझाव दिया है कि डिबगिंग करते समय सेट NSZombieEnabledकरने के लिए सुझाव दें true। NSZombie क्या है? क्या यह एक ढांचा है? एक सेटिंग?
जवाबों:
यह एक मेमोरी डिबगिंग सहायता है। विशेष रूप से, जब आप सेट करते हैं NSZombieEnabledतब जब भी कोई वस्तु गिनती 0 को बनाए रखती है, बजाय इसके कि उसे NSZombieउदाहरण में रूपांतरित किया जाए । जब भी इस तरह के एक ज़ोंबी संदेश प्राप्त होता है, तो यह दुर्घटनाग्रस्त होने या अप्रत्याशित तरीके से व्यवहार करने के बजाय चेतावनी देता है। इस प्रकार, आप हाइस्टैक खोजों के बिना उन्नत टूल या श्रमसाध्य सुई के बिना सूक्ष्म ओवर-रिलीज़ / ऑटोरेलिज़ समस्याओं को डीबग कर सकते हैं।
नाम इस तथ्य पर एक स्पष्ट रूप से स्पष्ट खेल है कि वस्तुओं को "मृत" माना जाता है जब वे बनाए रखने की गिनती तक पहुंचते हैं 0. इस सेटिंग के साथ, वे एक अजीब अर्ध-जीवन में मौजूद हैं - न तो जीवित, न ही काफी मृत। असली लाश को बहुत पसंद करते हैं, सिवाय इसके कि वे कम दिमाग खाते हैं।
एडम ने यह बताने में बहुत अच्छा काम किया कि लाश क्या हैं, लेकिन पर्यावरण चर का उपयोग करना इनको खोजने और ट्रैक करने का सबसे अच्छा तरीका नहीं है।
ज़ोंबी का पता लगाने के लिए एक बेहतर तरीका, साधन का उपयोग करना है - XCode से "इंस्ट्रूमेंट रन के साथ" शुरू करें और "आवंटन" चुनें।
फिर रिकॉर्डिंग शुरू होने के ठीक बाद बंद कर दें, एलोकेशन इंस्ट्रूमेंट पर "i" बटन दबाएं, और "रेफरेंस कॉन्टेक्ट काउंट्स" और "एनसजॉम्बी डिटेक्शन सक्षम करें" को ऑन करें। अब इंस्ट्रूमेंट में फिर से रिकॉर्ड हिट करें, और आपका ऐप शुरू हो जाएगा - यदि कोई ज़ोंबी ऑब्जेक्ट भेजे गए संदेश रिकॉर्डिंग बंद हो जाएगी, और रिकॉर्डिंग टाइमलाइन में एक डायलॉग बॉक्स पॉप-अप हो जाएगा - आप उस जगह पर क्लिक कर सकते हैं जो हर जगह को खोजने के लिए एक ऑब्जेक्ट था बरकरार या जारी रखा गया।
संपादित करें: पिछली सलाह XCode 3 के लिए थी, यहाँ XCode 4 के लिए एक अतिरिक्त है:
XCode 4.2 में , ज़ोंबी इंस्ट्रूमेंट - ज़ोंबी इंस्ट्रूमेंट का उपयोग करने के लिए एक और भी आसान तंत्र है। ऐप को शुरू करने के लिए "रन" के बजाय, "प्रोफ़ाइल" का उपयोग करें और एक साधन चयनकर्ता सामने आएगा। "ज़ोंबी" का चयन करें, और ऐप चलना शुरू हो जाएगा - जो भी आपके क्रैश का कारण बनता है, एक संवाद "ज़ोंबी संदेश" कहकर पॉप जाएगा।
वहां से, संवाद बॉक्स में छोटे तीर पर क्लिक करें। यह उन सभी समय की सूची में ले जाएगा जो ज़ोंबी ऑब्जेक्ट बनाया गया था, बनाए रखा गया था या जारी किया गया था। साइड बार को ऊपर खींचें और आप प्रत्येक प्रविष्टि में जा सकते हैं, उस कोड के स्टैक ट्रेस को देख रहे हैं जो रिटेन काउंट में प्रत्येक समायोजन के लिए जिम्मेदार था।
मैं मानता हूं कि केंडल ने क्या जोड़ा, यह बहुत उपयोगी है, लेकिन मैं अभी भी पर्यावरण चर करने का सुझाव दूंगा ताकि आप भूल न जाएं कि वे सक्षम हैं। कोको देव में (अब समाप्त हो गई) लिंक के समान, मैंने इसे डाल दिया ताकि मैं इसे याद न करूँ:
if(getenv("NSZombieEnabled") || getenv("NSAutoreleaseFreedObjectCheckEnabled")) {
NSLog(@"ZOMBIES/AFOC ARE ENABLED!!! AAAAARRRRRRGH!!! BRAINS!!!");
}
यह मेरा ध्यान बहुत अच्छी तरह से पकड़ता है।
किसी की मदद करेंगे।
इंस्ट्रूमेंट्स पर विस्तृत दस्तावेज़। https://developer.apple.com/library/watchos/documentation/DeveloperTools/Conceptual/InstrumentsUserGuide/index.html#//apple_ref/doc/uid/TP40004652-CH3-SW1