2011-08-04 5 views
9

में उद्देश्य सी और जादू विधियों क्या उद्देश्य-सी क्लास विधि में कॉल को अवरुद्ध करने का एक तरीका प्रदान करता है जो मौजूद नहीं है?कक्षा

उत्तर

2

हाँ, आप resolveClassMethod साथ कर सकते हैं: वर्ग विधि (जो NSObject पर परिभाषित किया गया है): http://iphonedevelopment.blogspot.com/2008/08/dynamically-adding-class-objects.html

:

http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSObject_Class/Reference/Reference.html

यहाँ भी के लिए बाहर देखने के लिए कुछ न कुछ है (मुझे पहली बार स्टम्प्ड)

5

forwardInvocation विधि वह है जिसे आप उपयोग करना चाहते हैं। जब किसी ऑब्जेक्ट पर एक गैर-मौजूदा चयनकर्ता कहा जाता है तो इसे स्वचालित रूप से कहा जाता है। इस विधि का डिफ़ॉल्ट व्यवहार doesNotRecognizeSelector: (जो आपके कंसोल पर डीबग जानकारी आउटपुट करता है) को कॉल करना है, लेकिन आप इसे जो कुछ भी चाहते हैं उसे ओवरराइड कर सकते हैं। ऐप्पल द्वारा एक अनुशंसित दृष्टिकोण यह तरीका है कि इस विधि को किसी अन्य ऑब्जेक्ट पर विधि आमंत्रण अग्रेषित करें।

- (void)forwardInvocation:(NSInvocation *)anInvocation 

ध्यान दें कि forwardInvocation एक काफी महंगा ऑपरेशन है। एक एनएसआईएनवोकेशन ऑब्जेक्ट को ढांचे द्वारा बनाया जाना चाहिए और (वैकल्पिक रूप से) किसी अन्य उदाहरण पर चयनकर्ता को आमंत्रित करने के लिए उपयोग किया जाता है। यदि आप गैर-मौजूदा चयनकर्ताओं का पता लगाने की अपेक्षाकृत (अपेक्षाकृत) तेज विधि की तलाश में हैं तो आप इसके बजाय forwardingTargetForSelector लागू करना चुन सकते हैं।

- (id)forwardingTargetForSelector:(SEL)aSelector 

आप कैसे इन तरीकों को प्रभावी ढंग से ओवरराइड करने के लिए के लिए Apple's documentation चाहिए, वहाँ कुछ पकड़ लिया, के लिए बाहर देखने के लिए विशेष रूप से जब एक ही वस्तु लापता चयनकर्ताओं होगा पर forwardInvocation विधि अधिभावी के हैं।

+1

क्लास विधि अग्रेषण तंत्र के लिए क्लास विधियों की आवश्यकता होती है, उदाहरण के तरीकों से नहीं। '+ (शून्य) forwardingTargetForSelector: (SEL) sel;' ' + (शून्य) forwardInvocation: (NSInvocation *) anInvocation;' बाद में समारोह एक सहायक समारोह का उपयोग करता है: '+ (NSMethodSignature *) methodSignatureForSelector: (SEL) sel; ' – dmitri