【发布时间】:2009-05-26 20:24:31
【问题描述】:
例子:
我有 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"];
第一行编译。但是第二个给出了一个错误:“image undeclared”。
【问题讨论】:
-
我已经编辑了我的答案以包含一个基本的工厂模式。你想做:id image = [cls imageNamed:@"avatar.png"]。但是,最好在此处使用通用的基本类型(即 UIImage* image = ...),因为您问题的第一部分表明情况就是这样。
标签: iphone objective-c cocoa-touch uikit