这是在objC中执行某些函数的愚蠢问题,例如:
NSString *function = @"-(void)execute{NSLog(@"123");}"
如何执行该字符串成为一个函数?
答案 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的文档:
并检查这个好的描述:
答案 3 :(得分:0)
不可能。正如其他人指出的那样,您可以使用NSSelectorFromString从字符串创建选择器,然后您可以使用performSelector:withObject:或它的变体来调用该方法。