我正在尝试使用一个字符串数组在我的类中运行时动态访问方法。现在这些方法已经存在,最终我想创建它们。 这可能吗?
例如:
bool nextLevel=NO;
for(NSString * match in gameLevels)
{
if([match isEqualToString:self.level])
{
nextLevel=YES;
}
else if(nextLevel==YES)
{
self.level=match;
nextLevel=NO;
}
}
//access method named self.level
提前谢谢!
答案 0 :(得分:1)
我用:
NSSelectorFromString(selectorString)
在您的情况下,selectorString
将是:
NSString * selectorString = @"setLevel:";
这是' setLevel'而不是'水平'因为在分配发生时,Objective-C运行时会自动将点属性扩展为这些选择器名称。
答案 1 :(得分:0)
要访问基于字符串的方法,请检查其他答案。
要在运行时添加方法,您需要创建IMP函数或块。
如果使用某个功能,可以是:
void myMethodIMP(id self, SEL _cmd)
{
// implementation ....
}
您也可以使用这样的块:
IMP blockImplementation=imp_implementationWithBlock(^(id _self, ...){
//Your Code here
}
然后你需要添加方法,如下所示:
class_addMethod(yourClass, @selector(selectorName), (IMP) blockImplementation, encoding);
编码部分是一种特殊的运行时编码,用于描述方法接收的参数类型。您可以在Objective-C运行时引用上找到它。
如果在生成的方法上收到动态参数,则需要使用va_list读取值。