मुझे पता है कि कार्यों को गतिशील रूप से कहा जा सकता है, लेकिन क्या स्थिर रूप से निर्धारित करने का कोई तरीका है (और ओबीजेसी वस्तुओं के तरीकों) को नहीं कहा जा रहा है?क्या Xcode4 में अप्रयुक्त कार्यों को निर्धारित करने का कोई तरीका है?
उत्तर
मुझे यकीन नहीं है कि किसी के लिए इस तरह के स्थैतिक विश्लेषण उपकरण को करने का प्रयास करने के लिए यह एक समझदार बात है - यह बहुत जटिल होगा, और आपको शायद यह पता चलेगा कि यह केवल उन कार्यों के सामान्य उदाहरण पाएगा जो नहीं कहा जाता - उदाहरण के लिए आपके वर्गों में बनाए गए कार्यों, और आपके पास उनके लिए कोई कॉल नहीं है। कोको के साथ बातचीत करने वाली सभी चीजें ... अच्छी तरह से समस्या यह है कि वे विभिन्न परिस्थितियों में 'शायद' कहलाए जा सकते हैं।
किसी भी मामले में, आपको वास्तव में क्या करना चाहिए रनटाइम कोड कवरेज है - क्योंकि यह आपको दिखाएगा (परीक्षण के एक सभ्य सूट के साथ) वास्तव में किस कोड का उपयोग किया जा रहा है, जो एक छोटा सबसेट होगा।
objc_cover संभावित रूप से अप्रयुक्त उद्देश्य-सी विधियों को ढूंढने में आपकी सहायता करेगा।
की अपनी सूची में -Wunused-function
जोड़ें।
यह संदर्भ द्वारा संदर्भित कार्यों को भी संदर्भित करता है (सामान्य उपयोग के लिए आदर्श)। फिर इष्टतम कवरेज के लिए अपने कार्यक्रम को जीसीसी और क्लैंग के साथ संकलित करें।
ध्यान दें कि यह ध्वज सभी मामलों (जैसे निर्यात किए गए कार्यों) को कवर नहीं करता है, और यह मुख्य रूप से उन कार्यों पर केंद्रित है जिनमें आंतरिक संबंध है। strip
और nm
का उपयोग करके भिन्नता बाहरी प्रतीकों को अलग करने में मदद कर सकती है - मुझे इस सटीक प्रक्रिया के लिए एक अच्छा टूल नहीं पता है।
यदि आप अप्रयुक्त objc विधियों को ढूंढना चाहते हैं, तो आपको अपना प्रश्न दोबारा जवाब देना चाहिए।
सहमत हुए। यह एक कठिन समस्या है, खासकर जब आप फंक्शन पॉइंटर्स, कॉलबैक और भारी सशर्त कोड शुरू करना शुरू करते हैं। रोक समस्या की तरह लगता है। – Luke
@ ल्यूक - सहमत है, सवाल दिलचस्प है - इसके बारे में सोचने से मुझे पता चला कि यह कितना मुश्किल होगा। चयनकर्ताओं और संदेश अग्रेषण के उपयोग के साथ भी। गतिशील कवरेज के लिए कोड को इंस्ट्रूमेंट करना - तुच्छ नहीं, लेकिन यह देखने में कहीं आसान है कि आप इसे कैसे कर सकते हैं। – iandotkelly
@Iandotkelly: दिलचस्प विचार, इसे गतिशील रूप से कर रहा है। छोटे हैक जो दिमाग में आता है: कुछ समय के लिए एक प्रोफाइलर के माध्यम से अपना कोड चलाएं, सभी फ़ंक्शन नाम निकालें, और एक टैग डेटाबेस के साथ तुलना करें। इससे आपको कुछ विचार मिलना चाहिए, जो कार्यों को शायद ही कभी कहा जाता है या कभी भी नहीं। यह निश्चित रूप से stochastically है और किसी भी तरह से 100% सटीक नहीं है, लेकिन वास्तव में बुलाए गए कार्यों की जांच को समाप्त करता है। – Arne