在objective-c中注册设置代码

时间:2014-05-08 16:42:06

标签: ios objective-c cocoa

是否存在使用Objective C和iOS运行时注册设置代码的标准机制?

为什么?

这样做的好处是可以很好地解耦代码。

  • 如果子系统需要特定设置,则设置将保留在该子系统中。

  • 如果一组文件需要注册,它们应该作为特定服务提供,可以封装在提供服务的单个文件中,并且不需要保持单独的配置文件到目前为止。

让代码运行并不是特别重要 - 我可以通过各种入口点自行完成。我需要的是编译器或链接器或运行时或 magic 能够收集我在程序的不同部分注册的任何内容,并在需要时让我拥有它。

如何在c ++中

使用c ++,我通常使用在调用main()之前构造的静态实例来安排此操作。我可以使用objective-c ++,但我更喜欢使用标准机制。

感谢。

2 个答案:

答案 0 :(得分:2)

我会抬头看:

+ (void)initialize

只要消息首次发送到类元对象,就会调用此方法,例如,在分配该类的对象时。

答案 1 :(得分:0)

注册代码

将类方法+(void) load用于需要自行注册的组件。

请注意,load方法适用于所有子类和所有类别。这与调用行为的常规方法完全不同。

创建注册表

如果组件需要在某种容器中注册自己,请使用类方法+(void) initialise创建一个容器来容纳要自行注册的组件。从我的有限测试中可以看出,当initialize方法使用带load方法的类时,可以在load 之前调用 initialize,这是如果可靠的话会非常酷。

运行已注册的代码

如果组件应该在您的应用程序的某个特定入口点执行某些操作,那么在该入口点,从注册表中获取已注册的组件并执行该操作。例如,您可以扩展UIApplicationDelegate的{​​{3}}以实际执行组件注册的设置阶段。

就我而言,我实际上希望每次构造特定类型的对象时都会运行已注册的代码,因此我在那里调用已注册的方法并让它们构建对象。

有关loadinitialise

的更多参考资料

感谢您的回答和评论让我把这个答案放在一起。