Xcode आपको विशिष्ट संकलक चेतावनियों के लिए (un) चेक सेटिंग्स की अनुमति देता है जो आपको कुछ प्रकार के अप्रयुक्त कोड की चेतावनी दे सकता है। (स्रोत सूची में परियोजना का चयन करें और फ़ाइल> जानकारी प्राप्त करें, फिर बिल्ड टैब का चयन करें।) यहां कुछ हैं (जो मेरे लिए क्लैंग और जीसीसी 4.2 के लिए दिखाते हैं) जो रुचि के हो सकते हैं:
- अप्रयुक्त कार्य
- अप्रयुक्त पैरामीटर
- अप्रयुक्त मूल्य
मुझे अप्रयुक्त आयातों का पता लगाने के लिए कोई विकल्प नहीं दिखता है, लेकिन यह थोड़ा सरल है - कम-तकनीकी दृष्टिकोण आयात बयानों को टिप्पणी करने के लिए है जब तक कि आपको एक संकलन त्रुटि / चेतावनी नहीं मिलती है।
अप्रयुक्त उद्देश्य-सी विधियां अप्रयुक्त सी फ़ंक्शन की तुलना में पता लगाने में अधिक कठिन हैं क्योंकि संदेश गतिशील रूप से भेजे जाते हैं। एक चेतावनी या त्रुटि आपको बता सकती है कि आपके पास एक संभावित समस्या है, लेकिन एक की कमी यह गारंटी नहीं देती है कि आपके पास रनटाइम त्रुटियाँ नहीं होंगी।
संपादित करें: (संभावित) अप्रयुक्त विधियों का पता लगाने का एक और अच्छा तरीका वास्तविक निष्पादन से कोड कवरेज की जांच करना है। यह आमतौर पर स्वचालित इकाई परीक्षण के साथ मिलकर किया जाता है, लेकिन होना नहीं चाहिए।
यह ब्लॉग पोस्ट Xcode का उपयोग करके यूनिट परीक्षण और कोड कवरेज का एक अच्छा परिचय है। पर अनुभाग gcov
(जो केवल GCC द्वारा उत्पन्न कोड के साथ काम करता है, वैसे) यह बताता है कि साधन कोड बनाने के लिए Xcode कैसे प्राप्त करें जो यह रिकॉर्ड कर सकता है कि इसे कितनी बार निष्पादित किया गया है। यदि आप सिम्युलेटर में एक स्पिन के लिए अपने ऐप का इंस्ट्रूमेंटेड बिल्ड लेते हैं, तो उस पर gcov चलाएं, आप देख सकते हैं कि CoverStory (एक काफी सरल जीयूआई) या lcov
(HTML रिपोर्ट बनाने के लिए पर्ल स्क्रिप्ट ) जैसे टूल का उपयोग करके किस कोड को निष्पादित किया गया था ।
मैं का उपयोग करें gcov
और lcov
के लिए CHDataStructures.framework और स्वत: जनरेट कवरेज रिपोर्ट प्रत्येक SVN के बाद करते हैं। फिर से, याद रखें कि निष्पादित कवरेज को एक निश्चित उपाय के रूप में समझना ठीक नहीं है कि कोड "मृत" है, लेकिन यह निश्चित रूप से उन तरीकों की पहचान करने में मदद कर सकता है जिनकी आप आगे जांच कर सकते हैं।
अंत में, चूंकि आप मृत कोड को हटाने की कोशिश कर रहे हैं, मुझे लगता है कि आपको यह SO प्रश्न दिलचस्प लगेगा:
id
, या रनटाइम पर कॉल करने के लिए चयनकर्ता बनाते हैं, तो स्थिर विश्लेषक गारंटी नहीं दे सकता है कोड वास्तव में अप्रयुक्त है। यदि अभी भी आवश्यक कोड हटा दिया गया है, तो आपको रनटाइम त्रुटियाँ मिलेंगी। क्या मैं कुछ भूल रहा हूँ?