2012-07-10 70 views
0

在Objective-C中有一种方法将对象/类存储在要传递到其他位置的alloc/init的变量中吗?在变量中存储对象类型,然后初始化

例如:

UIViewController = foo 
foo *bar = [[foo alloc] init] 

我试图建立一个系统,以在基于当前视图控制器上的单独的类动态创建导航按钮。我可以将'self'传递给该方法,但是结果变量不允许我分配/ init。我总是可以直接导入.h文件,但理想情况下,我希望尽可能简单地重用代码。也许我正在以这种错误的方式去做?

回答

2

不知道理解你的问题,但如果你想创建同一类的其他实例的新实例,你可以做这样的事情:

id foo; // an actual instance of any class 

id bar = [[[foo class] alloc] init]; // another instance 

如果foo的未声明为id,甚至可以使用快捷方式:[[foo.class alloc] init]或更短:[foo.class new]

您也可以使用类对象:

id foo; 
Class fooClass = [foo class]; 

id bar = [[fooClass alloc] init]; 

或者类名:

id foo; 
NSString* fooClassName = NSStringFromClass([foo class]); 

id bar = [[NSClassFromString(fooClassName) alloc] init]; 
+0

这就是我正在寻找的,查克也有类似的回应,谢谢! – 2012-07-12 18:27:16

1

假设你存储的className你想创建为NSString

你可以试试: id bar = [[NSClassFromString(foo) alloc] init]

1

是的,只需制作Class类型的变量即可。一个名为类分配给它,你可以做这样的:

Class foo = [UIViewController class]; 

或者类名是一个动态选择的字符串(嘿,它发生),你会做这样的:

NSString *className = @"UIViewController"; 
Class foo = NSClassFromString(className);