在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){}
    }

在ObjtoE-C中是否有相同的方法,只知道要传递给Objtovi-C类构造函数的参数类型。
提前谢谢。

最佳答案

是的,取决于你到底在做什么。objc没有语言级的“构造器”,方法通常与实例化方法一起调用,但是请注意,init是根据框架约定而不是规范来调用的,所以运行时不知道您要调用什么“构造器”。
您可以实例化一个对象(相当于分配它),如下所示:

id myObj = class_createInstance(NSClassFromString(@"MyClass"));

尽管你最好直接点:
id myObj = [NSClassFromString(@"MyClass") alloc];

但是你仍然需要调用任何你想要的方法。如果不想直接执行此操作,则需要知道方法的选择器,以便可以向对象发送正确的消息。选择器是消息签名的静态表示。您可以通过运行时API调用该方法,如下所示:
myObj = objc_msgSend(myObj, @selector(initWithStr1:str2:str3), myString1, myString2, myString3);
// Check myObj for nil which means a failed init.

objc运行时参考:http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/ObjCRuntimeRef/Reference/reference.html

10-05 20:33
查看更多