クラスのすべてのサブクラスを取得
1968 ワード
最近社内でデータ統計が必要で、会社のプロジェクトは現在モジュール開発を行い、データ収集の機能はSDKの形式で採集を行う.SDKの汎用性と低結合性を考慮して,データモデルを作成する際にモデル間多重継承方式を採用した.クラスを使用する場合、modelのクラスメソッドを使用して調整する必要がある場合があります.ある種類の下のすべてのサブクラスを取得する必要があります.再帰的な方法を採用して、1級1級探していきます.
クラスのサブクラスを取得
多重継承下のすべてのクラス名を取得(再帰)
クラスのすべてのクラス名を取得するには、@implementationメソッドが必要です.
ここで感謝http://www.cnblogs.com/zhidao-chen/archive/2013/03/22/2975792.html 提供する構想は別に私が書いた小さなdemoを添付してダウンロードをクリックします.
クラスのサブクラスを取得
/**
A
@param defaultClass A
@return
*/
+ (NSArray *)findAllOf:(Class)defaultClass
{
int count = objc_getClassList(NULL, 0);
if (count <= 0)
{
@throw@"Couldn't retrieve Obj-C class-list";
return [NSArray arrayWithObject:defaultClass];
}
NSMutableArray *output = [[NSMutableArray alloc]init];
Class *classes = (Class *) malloc(sizeof(Class) * count);
objc_getClassList(classes, count);
for (int i = 0; i < count; ++i) {
if (defaultClass == class_getSuperclass(classes[i]))//
{
[output addObject:classes[i]];
}
}
free(classes);
return [NSArray arrayWithArray:output];
}
多重継承下のすべてのクラス名を取得(再帰)
/**
, impletation
@param allClasses
@return
*/
+ (NSArray *)getAllSubClass:(NSArray *)allClasses{
__block NSMutableArray * allClassContainArray = [[NSMutableArray alloc]init];
__weak __typeof(self) weakSelf = self;
[allClasses enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
__strong __typeof(weakSelf) strongSelf = weakSelf;
NSArray * clssessArray = [strongSelf findAllOf:obj];
[allClassContainArray addObjectsFromArray:clssessArray];
}];
if (allClassContainArray.count == 0) {
return allClassContainArray;
}else{
return [allClassContainArray arrayByAddingObjectsFromArray:[self getAllSubClass:allClassContainArray]];
}
}
クラスのすべてのクラス名を取得するには、@implementationメソッドが必要です.
ここで感謝http://www.cnblogs.com/zhidao-chen/archive/2013/03/22/2975792.html 提供する構想は別に私が書いた小さなdemoを添付してダウンロードをクリックします.