Suppose I have Objective C interface SomeClass which has a class method called someMethod:
@interface SomeClass : NSObject {
}
Instead of:
[someOtherObject invokeSelector:@selector(someMethod) forClass:[SomeClass class];
call:
[[SomeClass class] performSelector:@selector(someMethod)];
Example (using GNUstep ...)
file A.h
#import
@interface A : NSObject {}
- (NSString *)description;
+ (NSString *)action;
@end
file A.m
#import
#import "A.h"
@implementation A
- (NSString *)description
{
return [NSString stringWithString: @"A"];
}
+ (NSString *)action
{
return [NSString stringWithString:@"A::action"];
}
@end
Somewhere else:
A *a = [[A class] performSelector:@selector(action)];
NSLog(@"%@",a);
Output:
2009-11-22 23:32:41.974 abc[3200] A::action
nice explanation from http://www.cocoabuilder.com/archive/cocoa/197631-how-do-classes-respond-to-performselector.html:
"In Objective-C, a class object gets all the instance methods of the root class for its hierarchy. This means that every class object that descends from NSObject gets all of NSObject's instance methods - including performSelector:."