How to instantiate an object from a stored Class?
我有一个函数可以给我一个类:
1
| - (Class)classForMyType:(NSString *)myType; |
这个类的返回如下:
1
| return [MyFirstClass class]; |
在我调用此函数的代码中,我可以这样存储类:
1
| Class myClass = [self classForMyType:@"foo"]; |
如何实例化myClass类型的变量?我想要类似于myClass *foo = [[myClass alloc] init]的东西,但这不起作用。
- 如果我在这里理解你的问题,它是:stackoverflow.com/questions/1174093/…
- 你说得对,我可以用id foo = [[myClass alloc] init];实例化对象,但是这样指针就没有合适的类。可能也有类指针吗?
- 使用[[nsclasfromstring(@"nameofclass")alloc]init];您可以用名称实例化。如果你愿意的话,你可以把这个类解析成你自己的类。
- 问题是一样的,我只能和id一起使用,对吗?
- WhateverClassIHad* foo = (WhateverClassIHad*) [[myClass alloc] init];。如果您不知道WhateverClassIHad(或合适的接口名称),那么您无论如何都不在乎。
如果使用的是字符串,可以这样实例化它。
1
| id object = [[NSClassFromString(@"NameofClass") alloc] init]; |
根据您的代码,看起来您不是在类型转换类。用一个ID像这样实例化它
1
| id foo = [[myClass alloc] init] |
或者像这样显式地键入cast(注意myclass不是实例变量,而是实际的类名):
1
| MyClass *foo = [[myClass alloc] init] |
- 如果我当时知道确切的类名,我就不会创建返回它的函数了:)
- 哈哈,是的,这是我的想法,但我把它放在以防万一。我认为做你想做的事是不可能的。我认为你能做的最好的就是将它实例化为它的父类,如果你确实知道的话,但是除此之外,我认为你不能在没有ID的情况下完成它,但是我会继续查找!
- 任务右侧的演员阵容没有任何作用。不需要将id类型的表达式强制转换为另一个对象类型。
- 应该是id而不是id *。
- 我的B伙计们-我纠正了两个错误。ID*是一个打字错误,你说的是正确的类型,不做任何事情。我已经更新了我的答案。