Objective c 在objective c中自动调用类方法

Objective c 在objective c中自动调用类方法,objective-c,cocoa,Objective C,Cocoa,我的情况: 一个仪表板控制器,在其中注册小部件并自动构建视图 将填充仪表板的小部件类,它们采用协议(需要一些非正式的方法),并且需要在仪表板类中注册,以便仪表板单身者知道谁想要加入 仪表板类具有+(void)寄存器:(class)w只需注册想要加入NSArray的类 p>我需要每个小部件类自动调用该方法。在C++中,我使用布尔方法生成一个布尔变量,用这个方法初始化。 Language=objective-c首次加载类时,objective-c运行时将调用两个方法+加载和+初始化。我相信您可

我的情况:

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

  • 将填充仪表板的小部件类,它们采用
    协议(需要一些非正式的方法),并且需要在仪表板类中注册,以便仪表板单身者知道谁想要加入

  • 仪表板类具有
    +(void)寄存器:(class)w只需注册想要加入NSArray的类

<> p>我需要每个小部件类自动调用该方法。在C++中,我使用布尔方法生成一个布尔变量,用这个方法初始化。
Language=objective-c

首次加载类时,objective-c运行时将调用两个方法<代码>+加载
+初始化
。我相信您可以通过在
+initialize

中调用
[self register]
来完成所需的操作运行时:

  • 获取运行时已知的所有类的列表
  • 迭代该列表,并检查该类是否符合您的小部件协议
  • 如果它确实符合协议,则调用
    +寄存器:
    方法或其他方法

  • 关于步骤2,您不能使用
    +conformsToProtocol:
    方法,因为您将迭代的类之一是
    NSZombie
    类,它在您对其调用方法时触发异常。因此,您可能希望改用运行时函数。

    +initialize
    仅在使用类时调用,而不是在加载类时调用。由于程序在注册类之前很可能不知道该类,
    +load
    更合适。因此解决方案只是覆盖该方法?这实际上取决于寄存器应该做什么。我发现所描述的整个架构即将。。。bad@JoshuaWeinberg你对我的问题有什么建议?我知道这似乎不是一个好的做法,但我的解决方案生成的代码不需要为新类型的Widget进行编辑。你没有足够的描述,我无法为你提供有效的替代方案。但是在你所说的范围内,在你想注册到singleton的类中实现+load应该是可行的。请使用正确的格式。