假设我有一个Objective C interface SomeClass,它有一个名为someMethod的类方法:

@interface SomeClass : NSObject {
}

+ (id)someMethod;
@end

在其他一些接口中,我希望有一个helper方法,可以在这样的类上动态调用someMethod:

[someOtherObject invokeSelector:@selector(someMethod) forClass:[SomeClass class];

invokeSelector年的实施应该是什么?有可能吗?

- (void)invokeSelector:(SEL)aSelector forClass:(Class)aClass {
   // ???
}

推荐答案

而不是:

[someOtherObject invokeSelector:@selector(someMethod) forClass:[SomeClass class];

电话:

[[SomeClass class] performSelector:@selector(someMethod)];

示例(使用GNUstep…)

存档A.h

#import <Foundation/Foundation.h>
@interface A : NSObject {}

- (NSString *)description;
+ (NSString *)action;
@end

上午归档

#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

http://www.cocoabuilder.com/archive/cocoa/197631-how-do-classes-respond-to-performselector.html的解释很好:

"在Objective-C中,类对象获取

Objective-c相关问答推荐

如何以编程方式获取iphone的IP地址

如何创建圆形按钮?

在 Interface Builder 中设计 UITableView 的section header

静态和动态单元格的 UITableView 混合?

在 NSData 和 base64 字符串之间转换

如何构建一个 Objective-C 静态库?

ios 13 - 带有 UISearchBar _searchField 的自定义 SearchBar 不起作用

失go 对 UITextView 的关注时隐藏键盘

CF 对象与 NS 对象

OSStatus 错误代码 -34018

iOS - 从应用程序获取 CPU 使用率

如何在 Objective-C 中创建静态方法?

声音在 iPhone 模拟器中不起作用?

Xcode - 如何将 XIB 连接到 ViewController 类

AppDelegate 的当前视图控制器?

请求访问相机胶卷的权限

Xcode没有编译任何项目? 'clang 失败,退出代码 255'

如何更新 Core Data 中的现有对象?

CMTime 秒输出

按字典中键的值对字典的 NSArray 进行排序