在Objective C中动态调用类方法 [英] Dynamically invoke a class method in Objective C
问题描述
假设我有Objective C接口 SomeClass
,它有一个类方法 someMethod
:
Suppose I have Objective C interface SomeClass
which has a class method called someMethod
:
@interface SomeClass : NSObject {
}
+ (id)someMethod;
@end
在一些其他接口中,我想有一个动态调用的帮助方法 someMethod
这样的类:
[someOtherObject invokeSelector:@selector(someMethod) forClass:[SomeClass class];
invokeSelector
的实现应该是什么?
What should be the implementation for invokeSelector
? Is it possible at all?
- (void)invokeSelector:(SEL)aSelector forClass:(Class)aClass {
// ???
}
推荐答案
>
Instead of:
[someOtherObject invokeSelector:@selector(someMethod) forClass:[SomeClass class];
调用:
[[SomeClass class] performSelector:@selector(someMethod)];
示例(使用GNUstep ...)
Example (using GNUstep ...)
文件Ah
#import <Foundation/Foundation.h>
@interface A : NSObject {}
- (NSString *)description;
+ (NSString *)action;
@end
文件Am
#import <Foundation/Foundation.h>
#import "A.h"
@implementation A
- (NSString *)description
{
return [NSString stringWithString: @"A"];
}
+ (NSString *)action
{
return [NSString stringWithString:@"A::action"];
}
@end
其他地方:
A *a = [[A class] performSelector:@selector(action)];
NSLog(@"%@",a);
输出:
2009-11-22 23:32:41.974 abc[3200] A::action
< hr>
来自 http://www.cocoabuilder.com/archive/cocoa/197631-how-do-classes-respond-to-performselector.html :
在Objective-C中,类对象获取
根类的所有实例方法,这意味着从NSObject派生的每个类对象
获得所有NSObject的实例方法 -
包括performSelector:。
"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:."
这篇关于在Objective C中动态调用类方法的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!