IPa*_*ash 72 iphone methods messaging dynamic objective-c
我只是想知道是否有办法调用一个方法,我用一个字符串动态建立方法的名称.
例如,我有一个名为loaddata的方法
-(void)loadData;
Run Code Online (Sandbox Code Playgroud)
打电话给我,我通常称之为
[self loadData];
Run Code Online (Sandbox Code Playgroud)
但我希望能够用字符串动态调用它,例如
NSString *methodName = [[NSString alloc] initWithString:@"loadData"];
[self methodName];
Run Code Online (Sandbox Code Playgroud)
这是一个愚蠢的例子,但我希望你明白我的观点.我正在使用它来为我为我的IPad应用程序设置的数据绑定类.很难解释,但要解决它我需要弄清楚如何用字符串调用方法.
有任何想法吗?
谢谢
shr*_*sva 103
你可以尝试类似的东西
SEL s = NSSelectorFromString(selectorName);
[anObject performSelector:s];
Run Code Online (Sandbox Code Playgroud)
Ada*_*gan 12
您可以使用objc_msgSend函数.它需要两个参数,接收器和选择器发送给它:
objc_msgSend(self, someSelector);
Run Code Online (Sandbox Code Playgroud)
您需要使用以下命令将字符串转换为适当的选择器NSSelectorFromString:
NSString *message = [self getSomeSelectorName];
objc_msgSend(self, message);
Run Code Online (Sandbox Code Playgroud)
该方法还采用可变数量的参数,因此您可以发送包含任意数量参数的消息.
NSString *message = [self getSomeSelectorNameWithManyArguments];
objc_msgSend(self, message, arg1, arg2, arg3, arg4);
Run Code Online (Sandbox Code Playgroud)