मैं सिमबेल का उपयोग करके प्लगइन लिखना सीखने की कोशिश कर रहा हूं। मुझे लक्ष्य प्लगइन के साथ लोड करने के लिए मेरी प्लगइन मिल गई है, और यह तरीका भी पता है कि मैं ओवरराइड करना चाहता हूं। हालांकि, मैं इंटरनेट पर स्निपेट के आधार पर class_getInstanceMethod का सही ढंग से उपयोग करने में सक्षम नहीं हूं। ओएसएक्स 10.6 और/या ओबीजेसी 2 में चीजें बदली हैं?ObjC2 में विधि कार्यान्वयन को गतिशील रूप से कैसे बदलें?
culater.net से निम्नलिखित कोड दूसरी पिछले विवरण पर "अधूरा प्रकार के अपसंदर्भन सूचक" देता है:
BOOL DTRenameSelector(Class _class, SEL _oldSelector, SEL _newSelector)
{
Method method = nil;
// First, look for the methods
method = class_getInstanceMethod(_class, _oldSelector);
if (method == nil)
return NO;
method->method_name = _newSelector;
return YES;
}
वहाँ कैसे एक विधि SIMBL प्लग इन का उपयोग ओवरराइड करने के लिए की एक पूरी उदाहरण है? धन्यवाद!
यह काम किया। धन्यवाद! – Abhi
पीटर - क्या यह 'फ़ंक्शन स्विजलिंग' करना भी संभव है, यानी किसी ऐसे फ़ंक्शन के कार्यान्वयन को प्रतिस्थापित करना जो कक्षा की विधि नहीं है? – Abhi
नहीं। विधि स्विजलिंग काम करता है क्योंकि चयनकर्ता के लिए कार्यान्वयन गतिशील रूप से उस समय को देखा जाता है जब आप संदेश भेजते हैं-i.e।, रन टाइम पर। एक नाम है, जो चयनकर्ता है, और एक मान, जो कार्यान्वयन है, और स्विजलिंग एक दूसरे के लिए एक मान स्वैप करता है, एक शब्दकोश में बदलते मूल्यों के विपरीत नहीं। कार्य गतिशील रूप से नहीं देखा जाता है; निष्पादन योग्य लोड होने पर पता बाध्य हो जाता है और उसके बाद तय रहता है, और कॉल सीधे उस पते पर जाती है, इसलिए रीमेप करने के लिए कुछ भी नहीं है। –