2015-02-24 47 views
0

我有给我回一个类的功能:如何从存储的类实例化对象?

- (Class)classForMyType:(NSString *)myType; 

此类还给这样的:

return [MyFirstClass class]; 

在代码中,在那里我调用这个函数,我可以存储类像这样:

Class myClass = [self classForMyType:@"foo"]; 

我该如何实例化一个类型为myClass的变量?我想要类似myClass *foo = [[myClass alloc] init],但这不起作用。

+1

如果我明白你的问题就在这里它是︰http://stackoverflow.com/questions/1174093/create-objective-c-class-instance-by-name – kocakmstf 2015-02-24 20:07:06

+0

你是对的,我可以通过'id foo = [[myClass alloc] init]实例化对象, ;',但是这样指针就没有合适的类。也可能有一个类指针呢? – gklka 2015-02-24 20:09:37

+0

与[[NSClassFromString(@“NameofClass”)alloc] init];你可以用名字实例化。那么如果你想要,你可以解析这个类到你自己的类,因为我知道 – kocakmstf 2015-02-24 20:13:58

回答

1

如果您使用字符串,则可以像这样实例化它。

id object = [[NSClassFromString(@"NameofClass") alloc] init]; 

根据你的代码,它看起来像你不是类型铸造你的班级。无论是用一个id

id foo = [[myClass alloc] init] 

或显式类型转换这样的(注意MyClass的是不是你的实例变量,但实际的类名)实例化这样的:

MyClass *foo = [[myClass alloc] init] 
+0

如果我知道确切的类名称,那么我不会创建一个函数来让它回来:) – gklka 2015-02-24 20:20:56

+0

大声笑是啊,这是我想的,但我把它放在以防万一。我认为它不可能做你想做的事。我认为你可以做的最好的事情就是将它实例化为它的父类,如果你确实知道这一点,但除此之外,我认为你没有ID就可以做到这一点,但我会继续寻找! – Chase 2015-02-24 20:25:46

+0

作业右侧的剧组什么也不做。您永远不需要将“id”类型的表达式转换为另一种对象类型。 – jlehr 2015-02-24 23:00:27