2012-03-27 14 views
9

मैं एक्सकोड में नया हूं। मैं जानना चाहता हूं कि एक्सकोड 4.3.1 में कुछ प्रोटोकॉल के अनुरूप सभी वर्गों को मैं कैसे जान सकता हूं? और मैं एक वर्ग के सभी उप-वर्गों को कैसे जान सकता हूं?मैं XCode 4 में कुछ प्रोटोकॉल के अनुरूप सभी वर्गों की सूची कैसे प्राप्त करूं?

उत्तर

14

उपयोग Objective-C runtime functions

  • objc_getClassList सुपर क्लास श्रृंखला
  • class_conformsToProtocol या एक वर्ग एक प्रोटोकॉल
+2

fwiw, '' class_conformsToProtocol' -conformsToProtocol' से रास्ता तेजी से होता है। हजारों कक्षाओं –

7
Protocol *protocol = @protocol(YourProtocol); 

int numberOfClasses = objc_getClassList(NULL, 0); 
Class *classList = malloc(numberOfClasses * sizeof(Class)); 
numberOfClasses = objc_getClassList(classList, numberOfClasses); 

for (int idx = 0; idx < numberOfClasses; idx++) 
{ 
    Class class = classList[idx]; 
    if (class_getClassMethod(class, @selector(conformsToProtocol:)) && [class conformsToProtocol:protocol]) 
    { 
     NSLog(@"%@", NSStringFromClass(class)); 
    } 
} 
free(classList); 
के अनुरूप है, तो जाँच करने के लिए -conformsToProtocol: विधि चलने के लिए Class तों
  • class_getSuperclass या -superclass विधि की सूची प्राप्त करने
  • +0

    के साथ यह एक बड़ी ऐप में काफी बोतल की गर्दन है, मैं ओबीजेसी प्रोग्रामिंग के लिए नया हूं, लेकिन सी अच्छी तरह से जानता हूं। क्या आप क्लास क्लासलिस्ट [numberOfClasses] कर रहे किसी भी संभावित समस्या को देखते हैं; मॉलोक + के बजाय मुफ्त? – Tommy

    +0

    @ टॉमी वेल, आप सही हैं, जो स्टैक –

    +0

    पर स्मृति आवंटित करने के लिए तेज़ होगा, जो भी गलत हो सकती है, जो लगभग हमेशा बेहतर होती है। – Tommy

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