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

标签 ios objective-c generic-programming

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

目前要做这样的事情,在 View Controller 中我必须做这样的事情

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

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

我想更改代码,以便任何想向此页面添加新类的人都可以在一个地方进行,例如:

Function1 *function;
[self addClass:function];

而在addClass中传入的“函数”会存储在一个数组中

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

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

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

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

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

谢谢

最佳答案

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

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

然后,当你想实例化一个时,你可以间接地创建它:

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

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

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

关于ios - 如何自动初始化不同类的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29440517/

相关文章:

iOS : Implement a search text field like spotlight search

mysql - NSDateFormater mysql "style"日期格式化

objective-c - 如何将键盘快捷键绑定(bind)到 cocoa 中的 nsbutton

ios - 通知是否进入队列,直到观察者捕获它? ( objective-c )

ios - 如何使用 Google Places Autocomplete API iOS 保存以前搜索的结果

objective-c - 在 Objective-C 中从 unsigned char * 到 char * 的定义行为

c++ - 可重载的 boost::asio::basic_stream_socket

c++ - 在考虑对齐要求的同时一般重载 operator new

java - 如何在Tapestry 5中使用通用编辑器进行数据库访问?

ios - Appcelerator studion 在工作区启动器屏幕上卡住