Objective-C 中是否有办法将对象/类存储在变量中以传递给其他地方的 alloc/init?
例如:
UIViewController = foo
foo *bar = [[foo alloc] init]
我正在尝试创建一个系统来根据当前视图控制器在单独的类中动态创建导航按钮。我可以将“self”传递给方法,但结果变量不允许我分配/初始化。我总是可以直接导入 .h 文件,但理想情况下,我希望尽可能简单地重用代码。也许我会以错误的方式解决这个问题?
Objective-C 中是否有办法将对象/类存储在变量中以传递给其他地方的 alloc/init?
例如:
UIViewController = foo
foo *bar = [[foo alloc] init]
我正在尝试创建一个系统来根据当前视图控制器在单独的类中动态创建导航按钮。我可以将“self”传递给方法,但结果变量不允许我分配/初始化。我总是可以直接导入 .h 文件,但理想情况下,我希望尽可能简单地重用代码。也许我会以错误的方式解决这个问题?
不确定是否理解您的问题,但如果您尝试创建与另一个实例相同的类的新实例,您可以执行以下操作:
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];
假设您将要创建的类名存储为NSString
你可以试试:
id bar = [[NSClassFromString(foo) alloc] init]
是的,只需制作 type 的变量Class
。要为其分配一个命名类,您可以这样做:
Class foo = [UIViewController class];
或者如果类名是一个动态选择的字符串(嘿,它发生了),你会这样做:
NSString *className = @"UIViewController";
Class foo = NSClassFromString(className);