Как я могу найти класс, который наследуется от определенного класса из моего списка классов? - PullRequest
1 голос
/ 16 мая 2011

Я получаю список всех классов моего приложения.

Я хочу найти каждый класс из моего списка, который наследуется от MySpecificWrapperClass.

int numClasses = objc_getClassList(NULL, 0);
Class *classes = malloc(sizeof(Class) * numClasses);
objc_getClassList(classes, numClasses);
for (int i = 0; i < numClasses; i++) {
    Class class = classes[i];
    if( isThisClassInheritsFrom(class,MySpecificWrapperClass )){
       MySpecificWrapperClass o = [[class alloc]init];
       ...
    }
} 
free(classes); 

Доза, кто-нибудь знает, как это сделать? Спасибо за помощь. Фред

Ответы [ 3 ]

1 голос
/ 17 мая 2011

Возможно, есть лучшее решение, но грубая сила должна это сделать. class_getSuperclass возвращает объект Class для данного суперкласса данного Class объекта.Когда вы попадаете в корневой класс, он возвращает Nil.

for (int i = 0; i < numClasses; i++) {
    Class class = classes[i];
    Class superclass = class_getSuperclass(class);
    while( superclass != Nil ){
        if( superclass == MySpecificWrapperClass ){
           // Got one!
           break;
        }
        superclass = class_getSuperclass(superclass);
    };
}

. Предполагается, что вы хотите проверить иерархию всю для данного класса, т. Е. Вы хотите, чтобы каждыйкласс, у которого есть ваш класс где-либо в его предках.Если вы заботитесь только о прямых подклассах, очевидно, вам нужно всего лишь один раз позвонить class_getSuperclass.

0 голосов
/ 18 мая 2011

Вы можете проверить, является ли класс подклассом другого класса, с помощью метода isSubclassOfClass:, определенного как NSObject.

Класс NSObject

0 голосов
/ 16 мая 2011

Чтобы проверить, является ли класс наследником вашего класса, попробуйте

if ([obj isKindOfClass: MySpecificWrapperClass])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...