我对Objective C还不熟悉,但我还没能发现语言中是否有一个等价的静态构造函数,也就是一个类中的一个静态方法,它将在类的第一个实例被实例化之前被自动调用.还是我需要自己调用初始化代码?
谢谢
我对Objective C还不熟悉,但我还没能发现语言中是否有一个等价的静态构造函数,也就是一个类中的一个静态方法,它将在类的第一个实例被实例化之前被自动调用.还是我需要自己调用初始化代码?
谢谢
第一次使用类时,在使用任何类方法或创建实例之前,+initialize
方法被称为automatically.你不应该自己打+initialize
.
我还想告诉大家一个我学到的能让你一路咬下go 的小道消息:100 is inherited by subclasses, and is also called for each subclasses that doesn't implement an 100 of their own.如果在+initialize
中天真地实现单例初始化,这可能会特别有问题.解决方案是判断类变量的类型,如下所示:
+ (void) initialize {
if (self == [MyParentClass class]) {
// Once-only initializion
}
// Initialization for this class and any subclasses
}
所有从NSObject派生的类都有+class
和-class
个方法返回Class
对象.因 for each 类只有一个类对象,所以我们确实想用==
操作符测试相等性.您可以使用它来过滤应该只发生一次的内容,而不是针对给定类下面的层次 struct (可能还不存在)中的每个不同类过滤一次.
关于一个无关紧要的话题,如果你还没有学习过以下相关方法,那么值得学习:
aClass
本身)aClass
和 children )Edit:查看@bbum的这篇文章,它解释了关于+initialize
:http://www.friday.com/bbum/2009/09/06/iniailize-can-be-executed-multiple-times-load-not-so-much/的更多信息
此外,迈克·阿什(Mike Ash)还写了一篇详细的周五问答;A关于+initialize
和+load
方法: