在Objective-C中相当于静态构造函数?

我是新来的目标C,我还没有能够找出是否有相当于静态构造函数的语言,这是一个类中的静态方法,将自动在这样的类的第一个实例之前被调用被实例化。 还是我需要自己调用初始化代码?

谢谢

+initialize方法在使用任何类方法或创build实例之前首次自动调用类。 你永远不应该打电话+initialize你自己。

我也想传递一些小技巧,我知道可以咬你的路: +initialize是由子类inheritance的,并且还要求每个没有实现自己+initialize的子类 。 如果你天真地在+initialize实现单例初始化,这可能是特别有问题的。 解决的办法是检查类variables的types如下所示:

 + (void) initialize { if (self == [MyParentClass class]) { // Once-only initializion } // Initialization for this class and any subclasses } 

所有从NSObject派生的+class都有返回Class对象的+class-class方法。 由于每个类只有一个Class对象,因此我们希望使用==运算符来testing相等性。 您可以使用它来过滤应该只发生一次的事情,而不是一个给定的类下的层次结构(可能还不存在)中的每个不同的类。

关于一个相关的话题,如果你还没有这样做,那么值得学习下面的相关方法:

  • – isMemberOfClass:(Class)aClass (仅适用于aClass本身)
  • – isKindOfClass:(Class)aClass (对于aClass和儿童是true)
  • + isSubclassOfClass:(Class)aClass (同上,但类方法)

编辑:看看这个post由@bbum解释更多关于+initialize : http : //www.friday.com/bbum/2009/09/06/iniailize-can-be-executed-multiple-times-load-not- 非常/

另外,Mike Ash写了一个关于+initialize+load方法的详细周五Q&A: https : //www.mikeash.com/pyblog/friday-qa-2009-05-22-objective-c-class-loading-and -initialization.html

在使用类之前,会调用+ initialize类的方法。

这个主题的一个附录:

还有另一种方法来在obj-c中使用__attribute指令创build一个“静态构造函数”:

 // prototype void myStaticInitMethod(void); __attribute__((constructor)) void myStaticInitMethod() { // code here will be called as soon as the binary is loaded into memory // before any other code has a chance to call +initialize. // useful for a situation where you have a struct that must be // initialized before any calls are made to the class, // as they would be used as parameters to the constructors. // eg myStructDef.myVariable1 = "some C string"; myStructDef.myFlag1 = TRUE; // so when the user calls the code [MyClass createClassFromStruct:myStructDef], // myStructDef is not junk values. }