Вызов статического метода в неизвестном типе класса

У меня есть интересная проблема, когда я пытаюсь вызвать методы класса для класса, о котором я практически ничего не знаю в своем тестовом методе. Я могу проверить его наследование и любые протоколы, которые он может реализовать, но не могу найти простой способ просто вызвать метод для него, не связываясь с NSInvocation. Приведенный ниже код, хотя и грубо, пытается продемонстрировать проблему, с которой я столкнулся.

@interface ClassA : NSObject

+ (Class)classIsPartialClassOf;

@end

@implementation ClassA

+ (Class)classIsPartialClassOf {
    return [NSString class];
}

@end

@interface ClassB : NSObject

@end

@implementation ClassB

- (id)init {

    [ClassB testClass:[ClassA class]];

}

+ (void)testClass:(Class)classDecl {

    /* obviously if you know the type you can just call the method */
    [ClassA classIsPartialClassOf];

    /* but in my instance I do not know the type, obviously there are no classmethods to perform selector such as the fictional one below */
    [classDecl performSelector:@selector(classIsPartialClassOf)];

}

@end

Методы для получения реализаций, кажется, возвращают варианты экземпляров, и я не могу заставить их запускать сам статический класс.

Мои возможности ограничены вызовами или я пропустил что-то очевидное и должен пнуть себя?

Спасибо заранее за вашу помощь.

2 ответа

Решение

"Методы для получения реализаций, кажется, возвращают варианты экземпляров, и я не могу заставить их запускать сам статический класс".

Тогда используйте objc_getMetaClass("ClassName") вместо objc_getClass, Объекты класса сами являются объектами и являются экземплярами их метакласса. Если вы передаете объект метакласса, например, class_getMethod(), все будет отлично.

В чем проблема? Ваш код

[classDecl performSelector:@selector(classIsPartialClassOf)];

должно сработать. Как будет (проще написать)

[classDecl classIsPartialClassOf];

Объекты класса являются объектами. А методы класса - это просто методы, вызываемые для объекта класса.

Другие вопросы по тегам