मुझे पता है कि प्रोग्रामर के रूप में श्रेणियों का उपयोग कैसे करें, लेकिन मुझे उत्सुकता है कि उन्हें कैसे कार्यान्वित किया जाता है। क्या संकलक उन्हें एक स्थिर प्रारंभकर्ता से class_replaceMethod पर कॉल में संकलित करता है? धन्यवाद।उद्देश्य सी में लागू श्रेणियां कैसे लागू की जाती हैं?
उत्तर
विषय पर नया उत्तर।
प्रत्येक वर्ग में विधियों की एक सूची है, जब एक विधि लुकअप करते हैं तो विधि सूची शुरुआत से अंत तक स्कैन की जाती है। यदि रूट विधि तक पहुंचने तक सुपरकास की सूची स्कैन नहीं की जाती है, तो कोई विधि नहीं मिलती है। अगली बार तेजी से लुकअप के लिए पाए गए तरीके कैश किए गए हैं।
कक्षा में एक श्रेणी लोड करते समय श्रेणियों की विधि सूची मौजूदा सूची में तैयार की गई है, और कैश फ़्लश किए गए हैं। चूंकि सूची क्रमशः खोजी गई है इसका मतलब है कि श्रेणियों की विधि से पहले की खोज पर मूल विधि मिलेगी।
कक्षाओं का यह सेटअप आंशिक डेटा से, आंशिक डेटा से, आंशिक रूप से किया जाता है, जब कक्षा का पहली बार उपयोग किया जाता है। और निष्पादन योग्य कोड के साथ एक बंडल लोड करते समय फिर से किया जा सकता है।
संक्षेप में यह class_replaceMethod()
से थोड़ा अधिक निम्न स्तर है।
श्रेणियाँ किसी विशेष कार्यान्वयन की जरूरत नहीं है, वे कार्यान्वयन की प्रकृति शून्य से वास्तव में कर रहे हैं।
प्रोटोकॉल रन-टाइम पर कक्षाओं पर मार्कर के रूप में कार्य करता है। प्रोटोकॉल की सूची प्राप्त करने के लिए आप class_copyProtocolList()
का उपयोग कर सकते हैं जो कक्षा रनटाइम से अनुरूप होती है। प्रोटोकॉल प्राप्त करने के लिए प्रोटोकॉल प्राप्त करने के लिए एक भाई protocol_copyProtocolList()
फ़ंक्शन है।
ध्यान दें कि ये विधियां केवल इस विशेष कक्षा या प्रोटोकॉल के लिए प्रोटोकॉल की एक सूची लौटाती हैं। संदर्भ से सुपरक्लास, या अन्य प्रोटोकॉल से नहीं। इसका मतलब है कि रन-टाइम पर वास्तविक लुकअप महंगा होगा। इसके बजाय अनुरूपता के लिए पूछने के लिए class_conformsToProtocol()
(या protocol_conformsToProtocol()
) का उपयोग करें, ये विधियां परिणाम कैश कर सकती हैं।
अभ्यास में रन-टाइम पर अनुरूपता के लिए पूछताछ शायद ही कभी एक अच्छा विचार है। प्रोटोकॉल अनुरूपता संकलक द्वारा चेतावनियों के साथ मान्य है, अगर डेवलपर इन चेतावनियों को अनदेखा करना चुनता है, तो ... यह उनकी पसंद है।
प्रोटोकॉल के बारे में आप क्यों बात कर रहे हैं? वे श्रेणियों से पूरी तरह से अलग संरचनाएं हैं? –
@ जोशुआ वेनबर्ग - सच है, मैंने खुद का गधा बनाया है। मैं 100% यकीन था कि सवाल प्रोटोकॉल था। अरे, सही संदर्भ में मुझे अपना जवाब पसंद आया होगा। – PeyloW
आप जो कुछ भी जानना चाहते थे उसके बारे में आप यह जानना चाहते हैं कि वे यहां से कैसे काम करते हैं।
http://opensource.apple.com/source/objc4/objc4-493.9/runtime/objc-runtime-new.mm
क्रम पूरी तरह से खुला स्रोत है।
धन्यवाद, यह उपयोगी था। काश मैं कई उत्तरों को स्वीकार कर सकता हूं, इसलिए मैं आपकी टिप्पणी को ऊपर उठाने के साथ बसूंगा। –
- 1. स्ट्रिंग। लम्बाई सी # में कैसे लागू की जाती है?
- 2. जावा में सरणी कैसे लागू की जाती हैं?
- 3. PHP में सहयोगी सरणी कैसे लागू की जाती हैं?
- 4. neo4j दृढ़ता कैसे लागू की जाती है?
- 5. निर्भरता संपत्ति कैसे लागू की जाती है?
- 6. केक में लगातार जेवीएम सुविधा कैसे लागू की जाती है?
- 7. ओएस स्तर पर नींद कैसे लागू की जाती है?
- 8. क्रॉस बाहरी की तुलना में लागू होते हैं लागू
- 9. उद्देश्य-सी प्रोटोकॉल और श्रेणियां विरासत में मिल सकती हैं?
- 10. सी # जेनेरिक कैसे लागू किए जाते हैं?
- 11. लागू/प्रयास ब्लॉक कैसे लागू किए जाते हैं?
- 12. उद्देश्य-सी में @encode संकलक निर्देश लागू किया गया है?
- 13. समारोह की लागू घोषणा objc_getAssociatedObject सी 99
- 14. सी में केवल पढ़ने योग्य मेमोरी कैसे लागू की जाती है?
- 15. सूचकांक के उपयोग के बिना लिंक्ड सूचियां कैसे लागू की जाती हैं?
- 16. हास्केल (जीएचसी) में लागू सूचियां कैसे हैं?
- 17. कॉफीस्क्रिप्ट, 'लागू' लागू करने
- 18. एक यूआरएल लागू - सी #
- 19. सी #: लागू नहीं लूप्स
- 20. क्या जावास्क्रिप्ट उद्देश्य-सी में विधि की तरह लागू होता है?
- 21. "स्व लागू बेनामी कार्य" के उद्देश्य के
- 22. पायथन में बफर इंटरफ़ेस को लागू करने के लिए कौन सी विधियां लागू होती हैं?
- 23. कमजोर संदर्भ कैसे लागू किए जाते हैं?
- 24. कुशल सी ++ रनटाइम आंकड़े कैसे लागू करें
- 25. सीपीथन में जनरेटर और कोरआउट कैसे लागू किए जाते हैं?
- 26. सी #: ToString() कैसे लागू किया जाना चाहिए?
- 27. उद्देश्य-सी में, यूलर की संख्या?
- 28. जब ऐप शुरू करने की विधि एएसपी.नेट में लागू की जाती है?
- 29. लागू अलग सी ++ टेम्पलेट तर्क
- 30. क्या जावा एल्गोरिदम सी या जावा में लागू हैं?
धन्यवाद, इसे मिला। –
क्या पहली बार इस्तेमाल होने से पहले एक श्रेणी को "प्रारंभ करना" करने के लिए कोई अच्छी जगह है? मैंने 'प्रारंभिक' की कोशिश की लेकिन ऐसा लगता है कि जैसे ही श्रेणी वर्ग पहली बार बुलाया जाता है, इसलिए श्रेणी शुरू करना अनावश्यक हो सकता है, और अधिक महत्वपूर्ण, परिणामस्वरूप अनंत लूप हो सकते हैं। – Rivera