在Objective-C中是否有一种方法可以将一个对象/类存储在一个变量中,以便传递给其他地方的alloc / init?
例如:
UIViewController = foo
foo *bar = [[foo alloc] init]
我正在尝试创建一个系统,以根据当前视图控制器在单独的类中动态创建导航按钮。我可以将'self'传递给方法,但结果的变量不允许我使用alloc / init。我总是可以直接导入.h文件,但理想情况下我想尽可能简单地重用代码。也许我的方式错了?
答案 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);