从NSstring执行ObjC函数

时间:2014-03-20 10:30:44

标签: ios objective-c

这是在objC中执行某些函数的愚蠢问题,例如:

NSString *function = @"-(void)execute{NSLog(@"123");}"

如何执行该字符串成为一个函数?

4 个答案:

答案 0 :(得分:3)

这是不可能的,因为Objective-C是编译的,而不是解释的。

您可以在代码中添加-(void)execute {...}方法。然后,如果由于某种原因需要使用字符串调用此方法,则可以使用[self performSelector:NSSelectorFromString(@"execute")]

但字符串不能包含任何代码。必须将其限制为现有方法的名称。

答案 1 :(得分:1)

我认为你在寻找,

<强> 1。无参数

SEL aSelector = NSSelectorFromString(@"execute");

[self performSelector:aSelector];

<强>模拟:

-(void)execute;

<强> 2。单一参数

SEL singleParamSelector = NSSelectorFromString(@"methodWithOneParam:");

[self performSelector:singleParamSelector
                    withObject:first];

<强>模拟:

-(void)methodWithOneParam:(NSString*)first;

第3。多参数

SEL doubleParamSelector = NSSelectorFromString(@"methodWithFirst:andSecond:");

[self performSelector: doubleParamSelector
                    withObject: first
                    withObject: second];

<强>模拟:

-(void)methodWithFirst:(NSString*)first andSecond:(NSString*)second;

答案 2 :(得分:0)

您能否详细描述一下您真正想做的事情。您所描述的几乎就像运行时代码注入一样,如果是这样,请查看以下关于class_addMethod的文档:

https://developer.apple.com/library/mac/documentation/Cocoa/Reference/ObjCRuntimeRef/Reference/reference.html#//apple_ref/c/func/class_addMethod

并检查这个好的描述:

http://distriqt.com/post/846

答案 3 :(得分:0)

不可能。正如其他人指出的那样,您可以使用NSSelectorFromString从字符串创建选择器,然后您可以使用performSelector:withObject:或它的变体来调用该方法。