动态实例化对象Objective-C

时间:2011-10-24 16:10:51

标签: objective-c object dynamic instantiation

在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类构造函数的参数类型。

提前致谢。

1 个答案:

答案 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}}

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