2012-11-16 15 views
8

संभव डुप्लिकेट:
Do code blocks completely replace delegates?ब्लाकों बनाम प्रतिनिधियों

मैं सिर्फ एक मंच से निम्नलिखित घोषणा का सामना करना पड़ा।

"प्रतिनिधियों अतीत है ब्लाकों भविष्य हैं । "

1) ब्लॉक वरीय रास्ता प्रतिनिधियों से अधिक 'प्रतिनिधिमंडल का काम होता करने के लिए कर रहे हैं?
2) क्या एक प्रतिनिधि बनाम ब्लॉक का उपयोग करने का कोई विशेष लाभ है?

+1

जब तक कि मैं कुछ नया नहीं खो रहा हूं, वे दो पूरी तरह से अलग चीजें हैं जो दूसरे के लिए विकल्प नहीं हैं ... – Krease

+3

@ क्रिस: दोनों दृष्टिकोण कॉलबैक के लिए उपयोग किए जा सकते हैं। इसलिए प्रतिस्थापन – vikingosegundo

+5

के लिए कमरा है «तो, अंगूठे के नियम के रूप में, एक संचार प्रोटोकॉल सही है जब चल रहे संचार की आवश्यकता होती है, संचार के कारण होने वाले कार्यों को फैलता है या कार्य तीसरे स्रोत से निकल रहे हैं। ब्लॉक मुख्य रूप से असीमित क्रियाओं और एकल-शॉट कक्षाओं से जुड़े होते हैं। »Http: // stackoverflow।कॉम/प्रश्न/4584404/डू-कोड-ब्लॉक-पूरी तरह से प्रतिस्थापित-प्रतिनिधि/9035610 # 9035610 – vikingosegundo

उत्तर

25

मुझे लगता है कि प्रतिनिधियों में क्या मामला है और क्या ब्लॉक करते हैं में थोड़ी गलतफहमी है।

ऑब्जेक्टिव-सी में, वहाँ तीन तरीके कॉलबैक को संभालने के लिए कर रहे हैं:

  1. प्रतिनिधिमंडल - जहां एक वस्तु प्रतिनिधि किसी अन्य वस्तु की बनाने> और आप के द्वारा उत्पन्न की घटनाओं की जो प्रकार निर्दिष्ट करना प्रतिनिधि "ऑब्जेक्ट" ऑब्जेक्ट प्रतिनिधि ऑब्जेक्ट का जवाब देगा।

  2. लक्ष्य-क्रिया -> यूआई इंटरैक्शन में विशिष्ट, जहां यूआई सबव्यू (बटन, स्लाइडर, आदि) कुछ उपयोगकर्ता इनपुट (उदाहरण के लिए एक स्पर्श/टैप) के आधार पर एक ईवेंट उत्पन्न करता है जिसे पूर्वनिर्धारित ईवेंट हैंडलर द्वारा संभाला जाता है (आमतौर पर कुछ उद्देश्य-सी विधि जो डेवलपर निर्दिष्ट करता है)।

  3. अधिसूचना -> जहां कोई ऑब्जेक्ट NSNotificationCenter के किसी भी प्रकार की घटनाओं के लिए "सुनें" के लिए स्वयं को पंजीकृत करता है और उन घटनाओं में से एक या अधिक का जवाब देता है।

एक ब्लॉक स्वयं प्रतिनिधिमंडल, या किसी अन्य कॉलबैक को संभालने का एक तरीका नहीं है।

वे कोड के स्वयं निहित टुकड़े हैं जिनके पास स्थानीय चर और कॉलिंग विधि के पैरामीटर तक पहुंच है। उनका उपयोग अलग-अलग संदर्भों के समूह में व्यवहार को परिभाषित करने के लिए किया जा सकता है। ब्लॉक का मुख्य लाभ (जैसा कि मैंने इसे देखा है) यह है कि यह आपके कोडबेस को अव्यवस्थित करने वाले अपर्याप्त अति-विशिष्ट तरीकों को समाप्त करके कोड को सरल बना सकता है। ब्लॉक कोड को स्थानीयकृत करने में मदद करते हैं जहां यह सबसे अधिक समझ में आता है: ठीक उसी तरह कॉलबैक तंत्र के भीतर।

असल में, उनका उपयोग करके पठनीयता को बढ़ाता है और कोड को और अधिक बनाए रखने योग्य बनाता है।

क्या ये लाभ कॉलबैक को संभालने की 'पसंदीदा' विधि को ब्लॉक करते हैं, निश्चित रूप से व्यक्तिगत राय और अनुभव का विषय है। ;)

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