我们知道第一次访问对象时调用的方法 initialize。
假设我有一个班级,A,其孩子是 B、C、D
说,B,C,D被访问(A实际上是一个抽象类)。
会调用 [A initialize] 吗?
基本上 B、C 和 D 可以有自己的初始化方法,但方法相似。所以我想把它放在A中。
我不打算直接调用初始化。我想我只需要调用[超级初始化]。如果 B 根本没有初始化怎么办。会调用 [A initialize] 吗?
我们知道第一次访问对象时调用的方法 initialize。
假设我有一个班级,A,其孩子是 B、C、D
说,B,C,D被访问(A实际上是一个抽象类)。
会调用 [A initialize] 吗?
基本上 B、C 和 D 可以有自己的初始化方法,但方法相似。所以我想把它放在A中。
我不打算直接调用初始化。我想我只需要调用[超级初始化]。如果 B 根本没有初始化怎么办。会调用 [A initialize] 吗?
如果 A 有方法初始化并且您[B initialize]
在 B 没有实现这样的方法时调用,则调用 A 处的方法初始化,因为 B 是 A 的子项。
如果你想在子类 Initialize 中做额外的事情,那么你可以这样做:
@implementation A
+(void)initialize
{
// stuff you want to do for all of your subclasses
}
@end
@interface B : A
@end
@implementation B
+(void)initialize
{
[super initialize];
// anything special for B
}
@end
如果您只想初始化 A 类中的内容,请参阅 CodeHelps 答案
不,如果你直接打电话
[B Initiliaze]
(其中“Initialize”方法覆盖了 A 的 Initialize),不调用 A 上的方法。如果您需要调用它,您必须从“B Initialize”方法手动调用它。
[A initialize]
保证在之前被调用[B initialize]
。如果类B
没有实现+initialize
自己,那么调用[B initialize]
将第二次运行A
的+initialize
实现(使用self == B
)。