मुझे पता है कि एक ब्लॉक उद्देश्य-सी में निष्पादन योग्य कोड का एक पुन: प्रयोज्य हिस्सा है। क्या कोई कारण है कि मुझे फ़ंक्शन में कोड का एक ही हिस्सा नहीं डालना चाहिए और जब मुझे उस कोड को चलाने की आवश्यकता होती है तो केवल फ़ंक्शन कहा जाता है?उद्देश्य-सी में कार्यों पर ब्लॉक का उपयोग करने का कोई फायदा है?
उत्तर
यह इस बात पर निर्भर करता है कि आप क्या करने की कोशिश कर रहे हैं। ब्लॉक के बारे में अच्छी चीजों में से एक यह है कि वे स्थानीय दायरे को पकड़ते हैं। आप फ़ंक्शन के साथ एक ही अंतिम परिणाम प्राप्त कर सकते हैं, लेकिन आप प्रासंगिक मानों से भरे एक संदर्भ ऑब्जेक्ट को पास करने जैसे कुछ करने के लिए समाप्त होते हैं। एक ब्लॉक के साथ, आप ऐसा कर सकते हैं:
int num1 = 42;
void (^myBlock)(void) = ^{
NSLog(@"num1 is %d", num1);
};
num1 = 0; // Changed after block is created
// Sometime later, in a different scope
myBlock(); // num1 is 42
तो बस चर संख्या 1 का उपयोग करके, समय myBlock पर अपने मूल्य परिभाषित किया गया था पर कब्जा कर लिया है।
से एप्पल के documentation:
वे आपको मंगलाचरण का मुद्दा यह है कि है पर कोड लिखने की अनुमति देते हैं:
ब्लाकों एक उपयोगी दो मुख्य कारण के लिए पारंपरिक कॉलबैक कार्यों के लिए विकल्प हैं विधि कार्यान्वयन के संदर्भ में बाद में निष्पादित किया गया। ब्लॉक हैं, इस प्रकार फ्रेमवर्क विधियों के पैरामीटर अक्सर।
वे स्थानीय चर के लिए उपयोग की अनुमति है। कॉलबैक एक डेटा संरचना है कि सभी प्रासंगिक जानकारी आप एक कार्रवाई करने के लिए की जरूरत का प्रतीक की आवश्यकता होती है का उपयोग कर के बजाय, आप बस स्थानीय चर सीधे पहुंचें।
के रूप में जवाब में ब्रैड लार्सन टिप्पणी this answer रहे हैं:
ब्लाकों आप, कार्रवाई है कि एक घटना के जवाब में जगह ले, लेकिन आप एक अलग विधि या समारोह लिखना है बजाय परिभाषित वे अनुमति देते हैं दूँगी आप हैंडलिंग कोड लिखने के लिए जहां आपने उस घटना के लिए श्रोता सेट अप किया था। यह कोड की गड़बड़ी को बचा सकता है और अपना एप्लिकेशन अधिक व्यवस्थित कर सकता है।
एक अच्छा उदाहरण है जिनमें से मैं आप दे सकते हैं चेतावनी को देखने के है, यह अच्छा होगा अगर मैं चेतावनी को देखने के निर्माण के समय का फैसला किया है कि क्या होगा जब मैं कि खारिज करेगा बजाय मैं प्रतिनिधि विधि लिख सकते हैं और के लिए प्रतीक्षा कॉल करने के लिए। तो यह समझना और कार्यान्वित करना बहुत आसान होगा और यह तेजी से प्रसंस्करण प्रदान करता है।
कृपया बातें plagiarize नहीं है दूसरों उचित प्रशस्ति पत्र के बिना कहीं लिखा है। यह आपको इस साइट से बहुत जल्दी निलंबित कर देगा। –
हाँ..मैं भविष्य में ऐसा करूँगा ... शायद हाल ही में यह याद किया जा सकता है .. – rishi
- 1. क्या पाइथन कक्षा का उपयोग करने में कोई फायदा है?
- 2. क्या ऑब्जेक्ट इनिशिलाइज़र का उपयोग करने का कोई फायदा है?
- 3. टेक्स्टबॉक्स पर RichTextBox का उपयोग करने का क्या फायदा है?
- 4. क्या ऑब्जेक्ट पर संपत्ति घोषित करने के बजाए प्रोटोटाइप का उपयोग करने का कोई फायदा है?
- 5. इंटरलाक्ड क्लास का उपयोग करने के विपरीत अस्थिर कीवर्ड का उपयोग करने का कोई फायदा है?
- 6. क्या पर्ल या पायथन पर बैश का उपयोग करने का कोई फायदा है?
- 7. क्या मानक सी ++ या सी # पर सी ++/सीएलआई का उपयोग करने का कोई फायदा है?
- 8. क्या रिटर्न स्टेटमेंट का उपयोग करने का कोई फायदा है जो कुछ भी नहीं देता है?
- 9. क्या एएसपी.नेट में सिक्योरस्ट्रिंग का उपयोग करने का कोई फायदा है?
- 10. क्या सीएसएस में बहुत विशिष्ट चयनकर्ताओं का उपयोग करने का कोई फायदा है?
- 11. पायथन वर्चुअलबॉक्स एपीआई का उपयोग करने का क्या फायदा है?
- 12. क्या PHP में पहले शून्य का उपयोग करने का कोई फायदा है?
- 13. क्या एंड एंड ओ एंड एंड और || का उपयोग करने का कोई फायदा है PHP में?
- 14. क्या एमवीसी में एचटीएमएलहेल्पर का उपयोग करने का कोई फायदा है?
- 15. क्या गिट svn क्लोन में --no-metadata का उपयोग करने का कोई फायदा है?
- 16. जारी करने पर फ़िल्टर_has_var() का उपयोग करने का क्या फायदा है()
- 17. जावास्क्रिप्ट लोड करने के लिए document.write पर unescape का उपयोग करने का क्या फायदा है?
- 18. सरणी का उपयोग करने से arrayWithCapacity का उपयोग करने का क्या फायदा है?
- 19. bcrypt पर स्क्रिप का क्या फायदा है?
- 20. क्या '* 2' के बजाय '<< 1' का उपयोग करने का कोई फायदा है?
- 21. क्या पीजीपी का उपयोग करके दो बार एन्क्रिप्ट करने का कोई फायदा है?
- 22. VARCHAR पर CHAR का उपयोग करने का कोई लाभ?
- 23. घूर्णन पर गतिविधि को नष्ट करने का क्या फायदा है?
- 24. Inumerable <T> पर सूची <T> का उपयोग करने का क्या फायदा है?
- 25. गैर-जेनेरिक कॉल पर जेनरिक-कहां-क्लॉज कॉल का उपयोग करने का क्या फायदा है?
- 26. क्या विम-स्क्रिप्ट में दो कस्टम, पूर्ण कार्यों का उपयोग करने का कोई तरीका है?
- 27. एक उपयोगकर्तास्क्रिप्ट में, querySelector() बनाम jQuery के $() का उपयोग करने के लिए कोई फायदा है?
- 28. एक सादा डीएलएल पर COM का उपयोग करने का क्या फायदा है?
- 29. अपाचे एफओपी पर एंटेनाहाउस का उपयोग करने का क्या फायदा है?
- 30. सी #: क्या उनके आवंटन के रिवर्स ऑर्डर में संसाधनों का निपटान करने का कोई फायदा है?
ग्रेट स्पष्टीकरण। फिर भी मुझे कारण के लिए एक प्रश्न है 1. उदाहरण के लिए पूरा करने वाले हैंडलर ब्लॉक लें। यदि कोई बहु-थ्रेडिंग शामिल नहीं है, यानी। विधि और उसका ब्लॉक दोनों मुख्य कतार पर चल रहे हैं, ब्लॉक के अंदर और ब्लॉक के बाहर समापन कोड डालने के बीच कोई अंतर नहीं होना चाहिए। क्योंकि दोनों मामलों में विधि समाप्त होने के बाद पूरा कोड चलाया जाएगा। क्या यह सही है? – Philip007
हां, यह सच है, लेकिन ऐसे कई मामले हैं जहां किसी विधि को अतुल्यकालिक रूप से कुछ करने के लिए समय चाहिए, और मुख्य धागे को अवरुद्ध किए बिना ऐसा करता है (आवश्यक रूप से केवल मल्टीथ्रेडिंग नहीं, NSRunLoop देखें)।ऐसे एप्लिकेशन हैं जहां एक ही विधि कभी-कभी सिंक्रनाइज़ हो सकती है और इसे लौटने से पहले समापन ब्लॉक को कॉल कर सकती है, और अन्य बार असीमित रूप से चलती है। अलग-अलग (कॉलिंग) कोड लिखने के बिना दोनों संभावनाओं की अनुमति देना अच्छा होता है। एक और बात यह है कि समापन ब्लॉक में अक्सर तर्क होते हैं, जो अनिवार्य रूप से कई मानों को वापस करने की विधि के लिए अनुमति देता है। –
डब्ल्यूडब्ल्यूडीसी 2011 ("प्रैक्टिस में ब्लॉक और जीसीडी") से सत्र 308) सॉर्टिंग के साथ करने के लिए एक अच्छा उदाहरण के साथ सामान्य कार्यों (जैसे इस जवाब में शामिल) पर ब्लॉक के फायदे पर प्रकाश डाला गया है। – Aky