Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Calling a static method in an unknown type of class

I have an interesting problem where I am trying to call class methods on an class which I essentially know nothing about in my test method. I can inspect its inheritance and any protocols it may implement but can't see an easy way to just call a method on it without getting tied up with an NSInvocation. The code below, albeit crudely, tries to demonstrate the problem I am having.

@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

Methods for getting implementations seem to return instance variants and I can't get them to fire on the static class itself.

Are my options limited to invocations or have I missed something obvious and should kick myself?

Thank you in advance for your help.

like image 558
Adrian_H Avatar asked Dec 29 '25 04:12

Adrian_H


1 Answers

What is the problem? Your code

[classDecl performSelector:@selector(classIsPartialClassOf)];

should work. As will (simpler to write)

[classDecl classIsPartialClassOf];

Class objects are objects. And class methods are simply methods called on a class object.

like image 98
newacct Avatar answered Dec 31 '25 00:12

newacct



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!