在另一个问题(how to instantiate an object of class from string in Objective-C?)中,建议:
id myclass = [[NSClassFromString(@"MyClass") alloc] init];
[myclass FunctioninClass];
但是,[myClass FunctioninClass]
会产生错误,因为编译器不知道FunctioninClass
是否存在。
我知道可以存在的类是父母的所有后代。并且该父级具有我想要调用的方法的原型,除了我想调用重写的后代方法。这是否表明了解决方案?
答案 0 :(得分:4)
您可以改用performSelector。这是Apple doc
[myClass performSelector:@selector(FunctioninClass)];
答案 1 :(得分:2)
在@ user523234的评论之后,我决定改进我的答案并予以纠正。然而,他的回答在我看来不够好,如果选择器不可用,会导致代码崩溃。
所以这是解决方案:
id myclass = [[NSClassFromString(@"MyClass") alloc] init];
if ([myclass respondsToSelector:@selector(FunctioninClass)])
{
[myClass performSelector:@selector(FunctioninClass)];
}
使用- respondsToSelector:将确保您检查班级中是否存在该扇区。但是,您每次都需要使用preformSelector。我不确定你是否可以动态地输入标识符。
答案 2 :(得分:1)
由于您知道所有可能的类派生自一个父类,并且该类包含您需要的方法,因此只需:
ParentClass *myclass = [[NSClassFromString(@"MyClass") alloc] init];
[myclass FunctioninClass];
您使用NSClassFromString
选择要实例化的子类的事实并不是真正相关的。这只是一个简单的继承情况:myclass
" is-a" ParentClass
,因此您可以在其上调用ParentClass
的任何方法。