在我正在编写的 iOS 应用程序中,我想遍历类层次结构以列出所有子类的清单。我的意图是使用每个子类类型作为键 - viaNSStringForClass()
——在字典里。
我的动机是能够自动发现基类的所有变体,以便我可以调用与该类关联的方法。出于分工的原因,我不喜欢在这里使用方法覆盖。
这样的遍历可以吗?它将如何运作?
这是一个例子。此方法将返回您发送消息的类的所有子类。
@interface NSObject (Debugging)
+ (NSArray *) allSubclasses;
@end
@implementation NSObject (Debugging)
+ (NSArray *) allSubclasses
{
Class myClass = [self class];
NSMutableArray *mySubclasses = [NSMutableArray array];
unsigned int numOfClasses;
Class *classes = objc_copyClassList(&numOfClasses);
for (unsigned int ci = 0; ci < numOfClasses; ci++) {
// Replace the code in this loop to limit the result to immediate subclasses:
// Class superClass = class_getSuperclass(classes[ci]);
// if (superClass == myClass)
// [mySubclasses addObject: classes[ci]];
Class superClass = classes[ci];
do {
superClass = class_getSuperclass(superClass);
} while (superClass && superClass != myClass);
if (superClass)
[mySubclasses addObject: classes[ci]];
}
free(classes);
return mySubclasses;
}
@end
根据需要修改,进行递归调用等。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)