【问题标题】:How to instantiate an object from a stored Class?如何从存储的类中实例化对象?
【发布时间】:2015-02-25 07:15:37
【问题描述】:

我有一个函数可以返回一个类:

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

这个类是这样返回的:

return [MyFirstClass class];

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

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

如何实例化myClass 类型的变量?我想要myClass *foo = [[myClass alloc] init] 之类的东西,但这不起作用。

【问题讨论】:

  • 如果我明白你的问题,那就是:stackoverflow.com/questions/1174093/…
  • 你说得对,我可以通过id foo = [[myClass alloc] init]; 实例化对象,但是这样指针就没有正确的类了。是否也有可能有一个类指针?
  • with [[NSClassFromString(@"NameofClass") alloc] init];你可以用名字实例化。然后,如果您愿意,可以将此类解析为我所知道的自己的类
  • 问题是一样的,我只能和id一起使用,对吗?
  • WhateverClassIHad* foo = (WhateverClassIHad*) [[myClass alloc] init];。如果您不知道WhateverClassIHad(或合适的接口名称),那么您无论如何都不会在意。

标签: objective-c class instantiation


【解决方案1】:

如果你使用的是字符串,你可以像这样实例化它。

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

根据您的代码,您似乎没有对类进行类型转换。要么用 id 像这样实例化它

id foo = [[myClass alloc] init]

或者像这样显式类型转换(注意 MyClass 不是您的实例变量,而是您的实际类名):

MyClass *foo = [[myClass alloc] init]

【讨论】:

  • 如果我当时知道确切的类名,我就不会创建一个函数来返回它:)
  • 大声笑是的,这就是我想的,但我把它放在以防万一。我认为不可能做你想做的事。我认为你能做的最好的事情就是将它实例化为它的父类,如果你肯定知道的话,但除此之外,我认为没有 id 就无法做到,但我会继续寻找!
  • 作业右侧的演员表什么都不做。您永远不需要将 id 类型的表达式转换为另一个对象类型。
  • 应该是 id 而不是 id *
  • 我的伙计们 - 我纠正了这两个错误。 id * 是一个错字,你对正确的类型转换没有做任何事情是正确的。我已经更新了我的答案。
猜你喜欢
  • 2019-02-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多