सी ++ और जावा लोग हमेशा मुझे बताते हैं कि अपवादों को तब तक किसी भी प्रदर्शन की लागत नहीं है जब तक कि उन्हें फेंक दिया न जाए। उद्देश्य-सी के लिए भी यही सच है?
लघु उत्तर
केवल 64-बिट ओएस एक्स और iOS में।
वे पूरी तरह से स्वतंत्र नहीं हैं। अधिक सटीक होने के लिए, मॉडल को नियमित निष्पादन (अन्यत्र चलने वाले परिणामों) के दौरान लागत को कम करने के लिए अनुकूलित किया गया है।
विस्तृत जवाब
32 बिट ओएस एक्स और iOS पर, अपवाद क्रम लागत भले ही वे फेंक दिया नहीं कर रहे हैं। ये आर्किटेक्चर शून्य लागत अपवादों का उपयोग नहीं करते हैं।
64 बिट ओएस एक्स में, ओबीजेसी सी ++ की "शून्य लागत अपवाद" उधार लेने के लिए आगे बढ़ गया। शून्य लागत अपवादों में बहुत कम निष्पादन ओवरहेड होता है, जब तक फेंक दिया जाता है। शून्य लागत अपवाद प्रभावी ढंग से बाइनरी आकार में निष्पादन लागत को स्थानांतरित करते हैं। यह उन प्राथमिक कारणों में से एक था जिन्हें प्रारंभ में आईओएस में इस्तेमाल नहीं किया गया था। सी ++ अपवादों और आरटीटीआई को सक्षम करने से बाइनरी आकार 50% से अधिक हो सकता है - बेशक, मैं उम्मीद करता हूं कि उन संख्याओं को शुद्ध ओबीजेसी में बहुत कम होना चाहिए क्योंकि अनचाहे होने पर निष्पादित करने के लिए कम है।
arm64 में, अपवाद मॉडल को सेट जंप लांग जंप से इटेनियम-व्युत्पन्न शून्य लागत अपवादों (असेंबली द्वारा निर्णय) में बदल दिया गया था।
हालांकि, मुहावरेदार ObjC कार्यक्रमों लिखित या, अपवाद से उबरने के लिए ताकि आप स्थितियों जो आप से उबरने के लिए इरादा नहीं है के लिए उनके उपयोग को आरक्षित करना चाहिए (यदि आप सब पर उन्हें इस्तेमाल करने का फैसला) तैयार नहीं हैं। Clang manual on ARC में और संदर्भित पृष्ठ के अन्य सेक्टनों में अधिक जानकारी।
मुझे यकीन है कि सी ++ लोग आमतौर पर आपको बताते हैं कि अपवादों की लागत * नगण्य * फेंकने तक होती है। –