我是Xcode的新手。我想知道如何知道所有类符合Xcode 4.3.1中的某些协议? 我如何知道一个类的所有子类?
答案 0 :(得分:16)
使用Objective-C runtime functions。
objc_getClassList
获取Class
es class_getSuperclass
或-superclass
方法走过超类链class_conformsToProtocol
或-conformsToProtocol:
方法检查某个类是否符合协议答案 1 :(得分:8)
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);