我不知道你在那里尝试的代码是什么,它在语法上是无效的,操纵视图与你的问题无关.无论如何,如果你真的不知道这种类型,你通常会使用"id",这种类型转换为codegen的"void*".它具有特殊属性,假定它接收任何消息,因此它不会触发未知消息的编译器警告.
为了实例化一个类,你只需要为它保持"Class"对象.在Objective C中,类的所有实例都引用一个Class对象(遗留运行时中的isa指针),它也响应方法.换句话说,在以下代码中:
NSArray *myObject = [[NSArray alloc] init];
NSArray实际上是一个对象.所以这将产生等效的代码结果:
Class myClass = [NSArray class]; NSArray *myObject = [[myClass alloc] init];
甚至
Class myClass = NSClassFromString(@"NSArray"); NSArray *myObject = [[myClass alloc] init];
它使用NSClassFromString函数,它进入运行时并找到一个具有您传入的名称的类.
如果使用类getter,所有对象都返回它们的类,因此要实例化一个与现有对象相同的类的对象,如下所示:
- (void) leakObjectWithSameClassAs:(id)object { [[[object class] alloc] init]; }