我在一个例子中看过这个 - 在一个类初始化中,这行是否有任何用途?
+(void)initialize
{
if (self == [ToolController self])
{
...
}
}
我已经读过,在类方法中,self指的是类而不是对象。所以从理论上讲,这种检查总是会导致真的吗?
在我看来,这一行会解决这个问题:
ToolController == ToolController
这就是为什么我认为它总会导致真实的原因。我错过了什么吗?
答案 0 :(得分:3)
我认为您错过了self
是ToolController的子类的可能性。
大概在你正在阅读的例子中,+[ToolController initialize]
中发生的任何事情只有在超类(ToolController
)初始化时才会发生,而在任何子类时都不会发生 ToolController
初始化。
答案 1 :(得分:2)
关于NSObject
的{{1}}上的Apple文档:
如果子类没有实现初始化,则可以多次调用超类实现 - 运行时将调用继承的实现 - 或者如果子类显式调用[super initialize]。如果您想保护自己不被多次运行,您可以按照这些方式构建您的实现:
initialize
您可以假设每个子类都会覆盖+ (void)initialize {
if (self == [ClassName self]) {
// ... do the initialization ...
}
}
方法(事实上,大多数可能会赢得' t),检查课程实际上是您期望的课程是最佳做法。