实施例:我该如何动态创建一个类的实例?
我有10个视图控制器,它们都分配并以同样的方式初始化:
UIViewController *controller = [[MyViewController alloc] initWithNib];
(注意-initWithNib是UIViewController子类的一个自定义的方法)
下一个视图控制器类是OtherViewController,依此类推。我想在我需要的时候懒洋洋地加载视图控制器。但要做到这一点,我需要有一些“数组”,它会给我一个给定索引的相应类,以便我可以初始化它。
我最终创建了一个带有大开关语句的方法,它将为每个视图控制器分别执行那些令人讨厌的分配和初始化。我对此不满意。如果我可以将适当的类分配给一个变量,那么会更好,然后在switch语句的末尾,只需从变量中分配并初始化该类。
有没有办法做到这一点?
编辑:我发现了一个功能
id class_createInstance(Class cls, size_t extraBytes)
,每类似乎有一个属性“类”。但是我不能将它分配给一个实例变量。这是行不通的:
Class cls = [UIImage class];
cls *image = [cls imageNamed:@"avatar.png"];
第一行编译。但第二个提供了一个错误:“图像未声明”。
看起来像一个确切的副本http://stackoverflow.com/questions/381793 – smorgan 2009-05-26 20:30:31
我编辑了我的答案,包括一个基本的工厂模式。你想这样做:id image = [cls imageNamed:@“avatar.png”]。但是,最好在这里使用通用的基本类型(即UIImage * image = ...),因为问题的第一部分表明情况就是这样。 – Jason 2009-05-26 20:51:49