उद्देश्य-सी में चयनकर्ता किसी ऑब्जेक्ट को संदेश भेजने का एक और तरीका है? मैं वास्तव में समझ में नहीं आता क्यों उन्हें या क्यों उपयोग करें।उद्देश्य-सी में चयनकर्ता किसी ऑब्जेक्ट को संदेश भेजने का एक और तरीका है?
उत्तर
वे एक और तरीका है एक वस्तु के लिए एक संदेश भेजने के लिए नहीं हैं, वे एक ही तरीका है कर रहे हैं। उदाहरण के लिए, [myView setValue:@"foo"]
में, setValue:
एक चयनकर्ता है। (एक और, एक ही बात लिखने की कम सुविधाजनक तरीका objc_msgSend(myView, @selector(setValue:), @"foo")
है।)
इयान हेनरी कहते हैं, आप SEL
मूल्यों का उपयोग संकलन समय के बजाय कार्यावधि में एक चयनकर्ता का चयन कर सकते हैं। कोको में यह एक मौलिक तकनीक है; उपयोगकर्ता इंटरफेस आमतौर पर लक्ष्य/क्रिया बाइंडिंग का उपयोग कर नियंत्रकों से जुड़े होते हैं, जहां लक्ष्य एक वस्तु है और कार्रवाई एक चयनकर्ता है। आम तौर पर आप एक निब में सेट कर, लेकिन आप इसे कोड में भी कर सकते हैं:
[myButton setTarget:myController];
[myButton setAction:@selector(buttonClicked:)]; // Clicking the button will now call [myController buttonClick:myButton].
सबसे बुनियादी पर, हाँ, लेकिन आप रनटाइम पर संदेश बदल सकते हैं।
SEL a = [selectorFactory getSelector];
[someOtherObject performSelector:a];
और फिर selectorFactory.getSelector
में: उदाहरण के लिए:
if(foo == 1)
return @selector(thisSelector);
else
return @selector(thatSelector);
C#
या किसी अन्य इसी तरह की भाषा से आ रहा है, आप के लिए (शिथिल) NSNotification
s का उपयोग करके तुलना में अधिक आसानी घटनाओं अनुकरण कर सकती हैं। उदाहरण के लिए, आप दो आईवर, target
और selector
के साथ एक बटन क्लास बना सकते हैं, और जब बटन क्लिक किया जाता है तो बटन पर चयनकर्ता चयन करता है (उदाहरण के लिए)।
हालांकि, इसके अलावा चयनकर्ताओं के लिए बहुत कुछ है। यहाँ उनके बारे में और अधिक पढ़ें:
आप चर के रूप में चयनकर्ताओं स्टोर कर सकते हैं, और बाद में या एक अलग संदर्भ में उन्हें आह्वान। उदाहरण के लिए आप किसी ऑब्जेक्ट को किसी विशेष समय पर, या किसी भिन्न थ्रेड पर चयनकर्ता करने के लिए कह सकते हैं। आप डेटा के आधार पर प्रदर्शन करने के लिए कौन सा चयनकर्ता चुन सकते हैं, यह है कि इंटरफ़ेस बिल्डर और कोर डेटा उनकी बात कैसे करते हैं।
चयनकर्ता आमतौर पर तब उपयोग किए जाते हैं जब आप कॉलबैक तंत्र को परिभाषित करना चाहते हैं। कोको में चयनकर्ताओं के लिए सबसे आम उपयोग केस बटन के साथ नियंत्रण के साथ है। एक UIButton
बहुत सामान्य है, और इस तरह के बारे में पता नहीं है कि बटन दबाए जाने पर क्या होना चाहिए। इससे पहले कि आप एक का उपयोग कर सकें, आपको यह बताना होगा कि बटन दबाए जाने पर कौन सी विधि चलनी चाहिए।
[myButton addTarget:self
action:@selector(myButtonWasPressed)
forControlEvents:UIControlEventTouchUpInside];
- (void)myButtonWasPressed {
// Do something about it
}
तब, जब बटन दबाया जाता है, बटन लक्ष्य हम इसे पारित कर दिया पर चयनकर्ता कॉल करेंगे: यह इस प्रकार किया जाता है। इस तंत्र के साथ, हर बार जब आप इसे अपने कुछ कोड को कॉल करना चाहते हैं तो आपको बटन को उप-वर्ग करने की आवश्यकता नहीं है। इसके बजाए, UIButton
में आपके द्वारा चुने गए किसी भी कोड को प्रेषित करने के लिए एक सामान्य तंत्र है। (ठीक है, तकनीकी तौर पर, यह सुपर क्लास UIControl
कि प्रेषण तंत्र प्रदान किया है।)
--From Apple डेवलपर लाइब्रेरी -
एक चयनकर्ता एक विधि का चयन करने के लिए एक वस्तु पर अमल करने के लिए इस्तेमाल का नाम, या है अद्वितीय पहचानकर्ता जो स्रोत कोड संकलित होने पर नाम को प्रतिस्थापित करता है। स्वयं द्वारा एक चयनकर्ता कुछ भी नहीं करता है। यह बस एक विधि की पहचान करता है। एकमात्र चीज जो चयनकर्ता विधि का नाम सादा स्ट्रिंग से अलग करती है वह यह है कि संकलक सुनिश्चित करता है कि चयनकर्ता अद्वितीय हैं।एक चयनकर्ता उपयोगी बनाता है कि (रनटाइम के साथ संयोजन में) यह गतिशील फ़ंक्शन पॉइंटर की तरह कार्य करता है, जो किसी दिए गए नाम के लिए स्वचालित रूप से किसी भी वर्ग के लिए उपयुक्त विधि के कार्यान्वयन को इंगित करता है। मान लीजिए कि आपके पास विधि चलाने के लिए चयनकर्ता था, और कक्षा कुत्ते, एथलीट, और कंप्यूटर सिमुलेशन (जिनमें से प्रत्येक ने एक विधि को लागू किया)। चयनकर्ता का उपयोग प्रत्येक वर्ग के उदाहरण के साथ अपनी रन विधि का आह्वान करने के लिए किया जा सकता है - भले ही कार्यान्वयन प्रत्येक के लिए अलग हो।
- 1. संदेश पाइपलाइन भेजने में अनुशंसित तरीका क्या है?
- 2. पायथन में किसी नेटवर्क पर ऑब्जेक्ट भेजने का सबसे अच्छा तरीका क्या है?
- 3. क्या एंड्रॉइड ब्राउज़र से एक ऐप में संदेश भेजने का कोई तरीका है?
- 4. jQuery चयनकर्ता को अनुकूलित करने का सर्वोत्तम तरीका और क्यों?
- 5. किसी अन्य एप्लिकेशन को स्ट्रिंग भेजने का सबसे आसान तरीका क्या है? (विन एपीआई)
- 6. socket.io और node.js विशेष ग्राहक को संदेश भेजने के लिए
- 7. एंड्रॉइड: क्या किसी भी एंड्रॉइड डिवाइस पर एमएमएस भेजने का कोई सार्वभौमिक तरीका है?
- 8. घड़ी विंडो में एक ऑब्जेक्ट लेने का तरीका और "स्क्रिप्ट"
- 9. किसी Exchange सर्वर पर MailMessage भेजने और एक SMTP सर्वर
- 10. जीमेल आईएमएपी: सभी लेबल (फ़ोल्डर) को खोजने का कोई तरीका किसी विशेष संदेश में है?
- 11. चयनकर्ता और NSSelectorFromString
- 12. रेल पर रूबी - किसी विशेष समय पर ईमेल को संदेश भेजने की आवश्यकता है एक सप्ताह में
- 13. किसी ऑब्जेक्ट ऑब्जेक्ट से ऑब्जेक्ट कॉन्टेक्स्ट संदर्भ प्राप्त करने का सबसे तेज़ तरीका क्या है?
- 14. एक रिलीज संदेश अच्छा अभ्यास भेजने से पहले शून्य नहीं है तो जांच रहा है?
- 15. डब्ल्यूसीएफ के माध्यम से छवियों को भेजने का कुशल तरीका?
- 16. एक साथ फ़ाइल भेजने और नए पेज पर रीडायरेक्ट करने का एमवीसी तरीका क्या है?
- 17. रूबी में किसी तृतीय पक्ष ऑब्जेक्ट को नकल करने का सबसे अच्छा तरीका क्या है?
- 18. किसी कन्स्ट्रक्टर में मौजूदा ऑब्जेक्ट के पॉइंटर/संदर्भ को पारित करने का पसंदीदा तरीका क्या है?
- 19. जावा में, क्या सभी तर्कों को किसी विधि में डंप करने का एक त्वरित तरीका है?
- 20. क्या किसी आइटम को किसी शब्दकोश में जोड़ने का एक और शानदार तरीका है <> सुरक्षित रूप से?
- 21. सिल्वरलाइट में किसी व्यावसायिक ऑब्जेक्ट को क्लोन करने का सबसे अच्छा तरीका क्या है?
- 22. किसी सूची को एक सूची में बदलने का सबसे अच्छा तरीका, जहां कुंजी प्रत्येक ऑब्जेक्ट का मान है?
- 23. एक FIX संदेश पार्स करने का सबसे अच्छा तरीका है?
- 24. कास्टिंग बनाम किसी ऑब्जेक्ट को स्ट्रिंग में कनवर्ट करना, जब ऑब्जेक्ट वास्तव में एक स्ट्रिंग है
- 25. जावास्क्रिप्ट में किसी ऑब्जेक्ट के सभी विधियों को मुद्रित करने का कोई तरीका है?
- 26. बीएएम को स्पर्श करें, एनएफसी (आईसीएस) भेजने का एकमात्र तरीका?
- 27. एक चयनकर्ता के बजाय ब्लॉक ऑब्जेक्ट का उपयोग करना?
- 28. डेवलपर्स को इंटरनेट द्वारा एप्लिकेशन त्रुटियों और लॉग भेजने का सबसे अच्छा तरीका क्या है?
- 29. किसी ऑब्जेक्ट को अस्थिर ऑब्जेक्ट
- 30. गतिविधि से संदेश भेजने के लिए गतिविधि
ग्रेट उत्तर, लेकिन करने का क्या फायदा है: [myButton setAction: @selector (buttonClicked)] मेरे "सामान्य" संदेश के साथ सीधे मेरे नियंत्रक को संदेश भेजने के बजाय? – lampShade
कार्रवाई सेट करके, बटन क्लिक होने पर संदेश भेजा जाता है। अगर आप सीधे संदेश भेजते हैं, तो यह "अब" होता है (यानी, जब यूआई सेट हो जाता है)। जब आप खिड़की लोड करते हैं तो आपके सभी बटन तुरंत क्लिक होते हैं आमतौर पर उपयोगी नहीं होते हैं। –
मुझे यह सुनिश्चित करने दो कि मैं समझ रहा हूं कि आप क्या कह रहे हैं। मान लें कि मेरे पास एक बटन है, मेरा बटन जो यूआई में है। अगर मैंने इंटरफ़ेस बिल्डर में "सामान्य" लक्ष्य कार्रवाई की स्थापना की है। आइए कहें कि मेरे पास addItem नामक एक विधि है। जब UI को लोड किया जाता है तो addItem विधि स्वचालित रूप से कॉल की जाती है - भले ही उपयोगकर्ता ने बटन को धक्का नहीं दिया हो? – lampShade