NSParameterAssert क्या है?


84

क्या है NSParameterAssert?

क्या कोई उदाहरण के साथ समझा सकता है?

जवाबों:


115

यह परीक्षण करने का एक सरल तरीका है कि किसी विधि का पैरामीटर nil0. नहीं है या नहीं। तो मूल रूप से, आप इसका उपयोग एक पूर्व शर्त बनाने के लिए करते हैं, जिसमें कहा गया है कि कुछ पैरामीटर सेट होना चाहिए। यदि यह सेट नहीं किया जाता है, तो मैक्रो एप्लिकेशन को गर्भपात का कारण बनता है और उस लाइन पर एक त्रुटि उत्पन्न करता है। इसलिए:

- (void)someMethod:(id)someObjectThatMustNotBeNil
{
  // Make sure that someObjectThatMustNotBeNil is really not nil
  NSParameterAssert( someObjectThatMustNotBeNil );
  // Okay, now do things
}

पूर्व-शर्तें यह सुनिश्चित करने का एक सरल तरीका है कि प्रोग्रामर द्वारा तरीकों / एपीआई को सही ढंग से बुलाया जा रहा है। विचार यह है कि यदि कोई प्रोग्रामर पूर्व शर्त का उल्लंघन करता है, तो एप्लिकेशन जल्दी समाप्त हो जाता है - डिबगिंग और बुनियादी परीक्षण के दौरान उम्मीद है।

NSParameterAssert यह परीक्षण करने के लिए इस्तेमाल किया जा सकता है कि कोई भी अभिव्यक्ति सही होने के लिए मूल्यांकन करती है, इसलिए, आप इसे इस तरह भी उपयोग कर सकते हैं:

NSParameterAssert( index >= 0 ); // ensure no negative index is supplied

NSParameterAssert () मैक्रो के लिए Apple का प्रलेखन


1
अपने कोड में अपवादों को पकड़ना सुनिश्चित करें, अन्यथा यदि Assert सत्य है, तो यह आपके ऐप को क्रैश कर देगा।
लूसीस

14
@lucius: वितरित एप्लिकेशन में शर्तों की जाँच के लिए उपयोग नहीं किया जा सकता है, वे विकास के दौरान त्रुटियों को पकड़ने के लिए हैं। खराब स्थिति पर किसी दुर्घटना के कारण (जैसे एक नीब के लिए एक असम्बद्ध आउटलेट की तरह), चुपचाप विफल होने के बजाय, आपको समस्याओं का जल्द पता लगाने देता है। बहुत से लोग मैक्रो या #ifdefs के माध्यम से वितरण समय पर इसे निष्क्रिय कर देते हैं।
ब्रैड लार्सन

5
@lucius - जब पूर्व-शर्तें पूरी नहीं होती हैं तो लक्ष्य आवेदन निरस्त करने का कारण बनता है। इससे प्रोग्रामर को तुरंत पता चल जाता है कि उसने कुछ गलत किया है। यह सुनिश्चित करने के लिए कि कोको में दावों का मूल्यांकन नहीं किया गया है आप NS_BLOCK_ASSERTIONS मैक्रो को परिभाषित कर सकते हैं। यह उन्हें अक्षम करता है, लेकिन विचार यह है कि दुर्घटना के खिलाफ सुरक्षा के बजाय साइड इफेक्ट या धीमी गति को क्रियान्वित करने से रोक दिया जाए - उत्पादन द्वारा, यदि सही तरीके से उपयोग किया जाए तो दावे कभी भी ट्रिगर नहीं होने चाहिए।
जेसन कोको

1
क्या इन बिल्डरों को सरल तरीके से निकालना संभव है जब उत्पादन का निर्माण किया जाए। IMHO इनका उपयोग प्रोग्रामिंग त्रुटियों को पकड़ने के लिए विकास के दौरान किया जाता है (जैसा कि ऊपर टिप्पणी में बताया गया है)।
जोहान कार्ल्ससन

5
@JohanKarlsson यह संभव है, और Releaseकॉन्फ़िगरेशन में वर्तमान संस्करणों में डिफ़ॉल्ट रूप से सेट किया गया है (यह बहुत दूर जाता है) । आप सेट करके ऐसा नियंत्रित कर सकते हैं ENABLE_NS_ASSERTIONS, या परिभाषित करते हुए Xcode के नए संस्करण में निर्माण सेटिंग्स NS_BLOCK_ASSERTIONSमैक्रो और एक परियोजना की स्थापना * सक्षम फाउंडेशन Assertions` है 1. करने के लिए इसे स्थापित कर Xcode 5 में करने के लिए सेट का निर्माण स्थापित करने और चूक Yesमें Debugऔर Noमें Releaseविन्यास।
जेसन कोको
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.