在Java中,我们可以动态地实例化一个对象(只知道参数类型):
Class<?> msgClass = Class.forName(className);
constructor = msgClass.getConstructor(String.class, String.class, String.class);
MyClass myClass = (MyClass) constructor.newInstance(myString, myString2, myString3);
public class MyClass {
public MyClass(String s, String s2, String s2){}
}
有没有办法在objective-c中做同样的事情,只知道要传递给objective-c类构造函数的参数类型。
提前致谢。
答案 0 :(得分:5)
是的,取决于你真正在做什么。 ObjC没有相同的语言级“构造函数” - 有init
个方法通常与alloc
实例化方法一起调用,但请注意init
是框架的id myObj = class_createInstance(NSClassFromString(@"MyClass"));
约定而不是规范,因此运行时不会“知道”你想要调用的“构造函数”。
您可以实例化一个对象(相当于分配它),如下所示:
id myObj = [NSClassFromString(@"MyClass") alloc];
虽然你可以更直接地做到这一点:
init
但是你仍然需要调用你想要的任何myObj = objc_msgSend(myObj, @selector(initWithStr1:str2:str3), myString1, myString2, myString3);
// Check myObj for nil which means a failed init.
方法。如果您不想直接执行此操作,则需要知道方法的选择器,以便向对象发送正确的消息。选择器是消息签名的静态表示。您可以通过运行时API调用该方法,如下所示:
{{1}}