在某些时候,程序可能需要根据获取的参数来决定调用的方法。
要实现这样的功能,就需要使用到动态运行时方法了。
首先需要定义好接口,以便调用。
然后就是动态调用定义好的方法。
这里有两种方法,
第一种:
// 有参数则需要加上冒号
SEL sel = NSSelectorFromString(@"save:");
MyObject obj = [MyObject new];
[obj performSelector:sel withObject:@{@"1":@"one"}];
使用第一种方法,程序会出现警告。
第二种:(使用方法指针调用)
MyObject obj = [MyObject new];
SEL sel = NSSelectorFromString(@"save:");
IMP imp = [obj methodForSelector:sel];
/*
* id 对象
* SEL 对象的方法
* id 方法的参数
*/
void (*func)(id, SEL, id) = (void *)imp;
// 或者可以这样写
// ((void (*)(id, SEL, id))[obj methodForSlector:sel])(obj, sel, @{@"1":@"one"});
func(manager, sel, @{@"1":@"one"});
另外,id类型的熟练使用非常重要。
NSString *param = @"{\"mm\":\"iosqiao\",\"yhm\":\"123456\"}";
id obj = [NSJSONSerialization
JSONObjectWithData:[param dataUsingEncoding:NSUTF8StringEncoding]
options:0
error:nil];
MyObject *manager = [MyObject new];
if (!manager) {
return;
}
SEL sel = NSSelectorFromString(@"saveStorage:");
IMP imp = [manager methodForSelector:sel];
void (*func)(id, SEL, id) = (void *)imp;
func(manager, sel, obj);
转载于:https://www.cnblogs.com/hd1992/p/5648800.html