2010-02-23 12 views
27

मैं नई कक्षाएं बनाते समय डिफ़ॉल्ट रूप से .mm एक्सटेंशन का उपयोग करता हूं ताकि अगर मैं इसकी आवश्यकता हो तो मैं बाद में ओबीजेसी ++ का उपयोग कर सकता हूं।उद्देश्य-सी, .एम /। मिमी प्रदर्शन अंतर?

क्या ऐसा करने के लिए कोई नुकसान है? आप .m कब पसंद करेंगे? .m एक तेज़ निष्पादन योग्य के लिए संकलित है (क्योंकि सी आमतौर पर सी ++ से तेज है)?

उत्तर

44

.mm.m से अधिक "सामान्य" उद्देश्य-सी के लिए उपयोग करने का प्रमुख नुकसान यह है कि संकलन समय उद्देश्य-सी ++ के लिए काफी अधिक हैं। ऐसा इसलिए है क्योंकि सी ++ कंपाइलर सी कंपाइलर से अधिक समय लेता है। एक्सकोड 3.2 और उच्चतर के साथ, उद्देश्य-सी कोड उद्देश्य-सी/सी संकलन समय को काफी तेज़ करने के लिए Clang फ्रंटएंड टूल श्रृंखला का उपयोग कर सकता है। चूंकि क्लैंग अभी तक उद्देश्य-सी ++/सी ++ का समर्थन नहीं करता है, इससे आगे दोनों के बीच संकलन के समय में अंतर बढ़ जाता है।

डिफ़ॉल्ट रूप से .m का उपयोग करने की बेहतर रणनीति है। यदि आपको बाद में विकास में उद्देश्य-सी ++ का उपयोग करने की आवश्यकता है, तो .mm एक्सटेंशन का उपयोग करने के लिए फ़ाइल का नाम बदलने में कोई हानि नहीं है। यदि आप एक्सकोड के भीतर से हैं, तो परियोजना को स्वचालित रूप से नई नामित फ़ाइल का उपयोग करने के लिए अपडेट किया जाएगा।

बेशक सभी मानक चेतावनी लागू होती है जब आप उद्देश्य-सी ++ बनाम उद्देश्य-सी प्रदर्शन को रन टाइम पर तुलना करने का प्रयास करते हैं। चूंकि उद्देश्य-सी ++ एक सी ++ सुपरसेट है, जबकि उद्देश्य-सी एक सी सुपरसेट है, आप रनटाइम पर प्रदर्शन ट्रेडऑफ के साथ प्रत्येक दो अलग-अलग भाषाओं से निपट रहे हैं। यह देखते हुए कि आप ऑब्जेक्टिव-एक्स का उपयोग कर रहे हैं, आप संभवतः उपयोगकर्ता-स्तरीय एप्लिकेशन (सिस्टम स्तर ऐप नहीं) लिख रहे हैं और सी और सी ++ के बीच प्रदर्शन में अंतर संभवतः कोड कुशल एल्गोरिदम कोड करने की आपकी क्षमताओं से पूरी तरह से निर्धारित किया जा सकता है प्रत्येक भाषा। यदि आप सी ++ डेवलपर हैं, तो संभवतः आप सी और वीजा के विपरीत कोड बेहतर होंगे। तो, हमेशा के रूप में, नौकरी के लिए उपयुक्त उपकरण का उपयोग करें।

संदर्भ के लिए, आप भी इस जवाब में रुचि हो सकती: C vs C++ (Objective-C vs Objective-C++) for iPhone

ऑब्जेक्टिव-सी अद्यतन फ़र, 17, 2012 Xcode 4.0 के रूप में (LLVM 3.0 के साथ), बजना का समर्थन किया है ++। यहां तक ​​कि सी ++ 11 समर्थन अभी भी काफी मजबूत है।

7

आप केवल सी सुविधाओं का उपयोग करते हैं, तो .mm फ़ाइलें कोड है कि बहुत मीटर के लिए इसी तरह प्रदर्शन करती उत्पन्न करनी चाहिए

वहाँ भी मीटर से एक फ़ाइल का नाम बदलने के लिए जब आप सी इच्छा बाद में .mm को ++ सुविधाओं

करने के लिए कोई नकारात्मक पक्ष यह है
+0

तो आईएम/ओबीजे-सी ++ विकास के लिए एमएम एक्सटेंशन अनिवार्य रूप से बहिष्कृत है? – Sam

+0

भी, क्यों जीसीसी सिर्फ ओब्जे-सी ++ मानता है कि आर्किटेक्चर समर्थित है? कुछ फ़ाइलों से सी ++ कोड को अयोग्य घोषित करके क्या प्राप्त होता है? – Sam

+9

.m एक्सटेंशन को बहिष्कृत नहीं किया गया है, वास्तव में यह डिफ़ॉल्ट है। मान लें कि ओबीजेसी ++ एक बुरा विचार है क्योंकि कुछ ऐसे मामले हैं जहां सी ++ सी से अलग है (प्रतीक मैंगलिंग सबसे ज्यादा दिखाई देती है, लेकिन कई अन्य हैं)। .c फ़ाइलों में C++ को अनुमति देना उतना ही गलत होगा - वे दो अलग-अलग भाषाएं हैं। – rpetrich

संबंधित मुद्दे