在目标c中自动调用类方法

时间:2011-09-28 15:29:46

标签: objective-c cocoa

我的情况:

  • 一个仪表板控制器,用于在其中注册小部件并自动构建视图。

  • 要填充仪表板的小部件类,他们采用<widget>协议(需要一些非正式方法),并且需要在仪表板类中注册,以便仪表板单例知道谁想要进入

  • 仪表板类有+(void)register:(Class<widget>)w;,只需注册想要进入NSArray的类

我需要每个窗口小部件类自动调用该方法。在c ++中我用来制作一个布尔静态变量,我将用该方法初始化。 语言= objective-c

2 个答案:

答案 0 :(得分:2)

在第一次加载类时,objective-c运行时将调用两个方法。 +load+initialize。我相信您可以通过在[self register]内调用+initialize来完成您的工作。

答案 1 :(得分:0)

你可以这样做的方法是运行时:

  1. 获取运行时已知的所有类的列表。
  2. 迭代列表,并检查该类是否符合您的窗口小部件协议
  3. 如果它符合协议,则调用+register:方法或其他
  4. 关于步骤#2,您不能使用+conformsToProtocol:方法,因为您将迭代的其中一个类是NSZombie类,每当您调用其上的方法时都会触发异常。因此,您需要使用class_conformsToProtocol()运行时函数。