2009-08-15 8 views
10

के लिए कक्षा विधियों की सूची प्राप्त करें मैं किसी विशेष कक्षा के लिए कक्षा विधियों की सूची कैसे प्राप्त कर सकता हूं? मैंने class_copyMethodList फ़ंक्शन का उपयोग <objc/runtime.h> में घोषित करने का प्रयास किया है, लेकिन यह केवल मुझे उदाहरण विधियां दे रहा है। मुझे एक ऐसा फ़ंक्शन भी मिला है जो मुझे क्लास विधि के लिए एक विधि देता है, लेकिन केवल तभी जब मेरे पास विधि के चयनकर्ता पहले (class_getClassMethod) हैं।एक मनमानी वर्ग

कोई विचार?

धन्यवाद,

डेव

उत्तर

11

class_copyMethodList रिटर्न पारित कर दिया वर्ग के उदाहरण तरीकों। कक्षा के तरीके वास्तव में कक्षा के मेटाक्लास के उदाहरण विधियां हैं।

के लिए API Documentation में आपकी समस्या का समाधान शामिल है।

+0

बिल्कुल सही, धन्यवाद! मुझे विश्वास नहीं है कि मुझे याद आया। = पी –

19

मेटाक्लास का उपयोग करें।

#import <objc/runtime.h> 

int unsigned numMethods; 
Method *methods = class_copyMethodList(objc_getMetaClass("NSArray"), &numMethods); 
for (int i = 0; i < numMethods; i++) { 
    NSLog(@"%@", NSStringFromSelector(method_getName(methods[i]))); 
} 
free(methods); 
+3

चूंकि यह 'प्रतिलिपि' विधि है, इसलिए जब आप इसके साथ काम करते हैं तो 'मुक्त (विधियों)' को न भूलें। चाहे आप एआरसी - सी आवंटन का उपयोग कर रहे हों, भले ही संदर्भ गिनती न हो, इसलिए स्वचालित संदर्भ गिनती आपके साथ आपकी सहायता करने वाली नहीं है। – Tommy

+1

प्रलेखन आयात पथ पर थोड़ा अस्पष्ट लगता है, मैंने उपयोग किया: #import prewett

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