Objective c 如何通过名称(方法名称为字符串)调用类方法?

Objective c 如何通过名称(方法名称为字符串)调用类方法?,objective-c,Objective C,在我的应用程序中,我遇到了一种情况,需要使用方法名(NSString)调用特定的类方法 例如: 有一个名为test1的类,它具有方法hello @接口test1:NSObject{ }); -你好:(id)vals; @结束 现在,我需要从这里调用/执行方法hello() 假设(id)实例是类test1的实例。 -(void) RunFunction:(id)instance andFunctionName:(NSString*)fname andParamters:(id)params

在我的应用程序中,我遇到了一种情况,需要使用方法名(NSString)调用特定的类方法

例如: 有一个名为test1的类,它具有方法hello


@接口test1:NSObject{

}); -你好:(id)vals; @结束

现在,我需要从这里调用/执行方法hello()

假设(id)实例是类test1的实例。

-(void) RunFunction:(id)instance andFunctionName:(NSString*)fname andParamters:(id)params {

// need to do something like this - is it possible // if yes how do i acheive this. // sample java code starts. Method m = instance.getClass().getDeclaredMethod(fname,params); m.invoke(fname,params); // sample java code ends. }

-(void)RunFunction:(id)实例和函数名:(NSString*)fname和parameters:(id)params{

//需要做这样的事情-可能吗 //如果是,我该怎么做。 //示例java代码开始。 方法m=instance.getClass().getDeclaredMethod(fname,params); m、 调用(fname,params); //示例java代码结束。 }

有人能帮我吗。

您可以使用
-[NSObject performSelector:withObject::
。在这种情况下:

[instance performSelector:NSSelectorFromString(fname) withObject:params]

您将使用
-[NSObject performSelector:withObject::
。在这种情况下:

[instance performSelector:NSSelectorFromString(fname) withObject:params]

如果方法的参数超过2个,则不能使用此方法。他的预期用例只需要一个对象作为参数。在我看来,这是最合适的解决方案。对于多个参数,您可以使用NSInvocation。看看,如果方法有超过2个参数,你就不能使用它。他预期的用例只需要一个对象作为参数。在我看来,这是最合适的解决方案。对于多个参数,您可以使用NSInvocation。看看你是不是用空格和大写来伤害我们?在正常情况下,我会进去修理,但我太累了。但有一些有用的地方:事实上,您试图调用的不是类方法(它是一个实例方法)。同时,学习许多关于空格和大写的约定中的任何一种(不管是哪一种,但看在上帝的份上,保持一致);如果你在理解类方法和实例方法之间的区别等方面遇到困难,那么阅读苹果的Objective-C指南也可能是一个好主意。@jonathan sterling-我说的是类方法而不是实例方法,这是我的错误。谢谢你指出我的错误并给出宝贵的建议。顺便说一句,@Giridhar,我觉得我之前的评论有点太苛刻了。你是不是用空格和大写来伤害我们?在正常情况下,我会进去修理,但我太累了。但有一些有用的地方:事实上,您试图调用的不是类方法(它是一个实例方法)。同时,学习许多关于空格和大写的约定中的任何一种(不管是哪一种,但看在上帝的份上,保持一致);如果你在理解类方法和实例方法之间的区别等方面遇到困难,那么阅读苹果的Objective-C指南也可能是一个好主意。@jonathan sterling-我说的是类方法而不是实例方法,这是我的错误。谢谢你指出我的错误并给出宝贵的建议。顺便说一句,@Giridhar,我觉得我之前的评论有点太苛刻了。