在Objective C中动态调用类方法 [英] Dynamically invoke a class method in Objective C

查看:112
本文介绍了在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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆