在变量中存储对象类型然后初始化

时间:2012-07-10 20:51:51

标签: objective-c class variables pointers

在Objective-C中是否有一种方法可以将一个对象/类存储在一个变量中,以便传递给其他地方的alloc / init?

例如:

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

我正在尝试创建一个系统,以根据当前视图控制器在单独的类中动态创建导航按钮。我可以将'self'传递给方法,但结果的变量不允许我使用alloc / init。我总是可以直接导入.h文件,但理想情况下我想尽可能简单地重用代码。也许我的方式错了?

3 个答案:

答案 0 :(得分: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];

答案 1 :(得分:1)

假设您要将className存储为NSString

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

答案 2 :(得分:1)

是的,只需创建Class类型的变量即可。要为其指定命名类,您可以这样做:

Class foo = [UIViewController class];

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

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