Objective-C - 将NSString解析为可调用方法

时间:2012-02-20 13:58:14

标签: objective-c nsstring

我可以解析NSString让它调用与Objective-C中的名称相匹配的方法吗?这是一个例子:

如果我有一个名为doSomething的字符串,并且我有一个名为-(void) doSomething的方法,我可以执行类似scanf的操作来解析我输入的任何文本以检查是否有任何文本匹配它的方法,如果是,则调用该方法?

2 个答案:

答案 0 :(得分:3)

尝试NSSelectorFromString(@"methodName");以及相关的NSObject方法,例如respondsToSelector:

答案 1 :(得分:0)

jxpx777的答案将为您提供您正在寻找的信息,但是如果您需要更多信息,运行时会有一长串C函数,它们提供了对对象和类的相当完整的内省。

例如,如果您想要一个类实现的NSArray方法名称,您可以这样做:

Class myClass = [self class];

unsigned int methodCount;

Method *methods = class_copyMethodList(myClass, &methodCount);

NSMutableArray *methodNames = [NSMutableArray arrayWithCapacity:10];

for (int i = 0; i < methodCount; i++) {

    const char *methodNameCStr = sel_getName(method_getName(methods[i]));

    NSString *methName = [NSString stringWithCString:methodNameCStr 
                                            encoding:NSASCIIStringEncoding];

    [methodNames addObject:methName];
}

free(methods);

NSLog(@"Methods: %@", methodNames);

你会注意到普通的C调用和Objective-C / Cocoa是自由混合的。