如何自动初始化不同类的对象?

时间:2015-04-03 22:27:24

标签: ios objective-c generic-programming

我想创建一个自动生成UITableViewCell的类注册表类,当用户按下按钮时,它会转到该类并运行代码。

目前做类似的事情,在视图控制器中我必须做这样的事情

Function1Class *function = [[Function1Class alloc] init];
function.view.backgroundColor = [self veryLightGrayColor];
[self.navigationController pushViewController: menu animated: YES];

然后在数据源中我在cellForRowAtIndexPath中创建了一个新案例,并在委托中我在didSelectRowAtIndexPath中为一行方法调用创建了一个案例。

我想更改代码,以便任何想要在此页面添加新课程的人都可以在一个地方执行此操作,例如:

Function1 *function;
[self addClass:function];

addClass"功能"传入将存储在数组

对于cellForRowAtIndexPathdidSelectRowAtIndexPath个案,他们可以通过存储在数组中轻松调用正确的方法。

问题是如何自动化传递给addClass的每个类对象的初始化?

我可以让用户编写这样的代码来添加他们的类

Function1 *function = [[Function1 alloc] init];
[self addClass:function];

然后类对象已经初始化,但这意味着在启动期间每个类对象都被初始化,如果有很多类,这就是一个问题。如何从数组中取出一个类对象,然后将其初始化以使用它?类对象都是不同的类,所以我不能硬编码arrayOfClassObjects[i] = [[Function1 alloc] init];

由于

1 个答案:

答案 0 :(得分:1)

类是对象,因此您可以将类存储在数组中:

NSArray *functions = @[ [Function1 class],
                        [Function2 class] ];

然后,当你想要实例化一个时,你可以间接地做到:

id instance = [[functions[0] alloc] init];

所以你的addClass:应该是这样的:

- (void)addClass:(Class)cls {
    [self.classList addObject:cls];
}