你有點無所適從短語「指定初始化」的意思。一個班級可能有幾個初始者。我們來看一個虛構的貓類。這可能有以下初始化:
- init
- initWithName:
- initWithName:breed:
- initWithName:breed:age:
指定初始化是實際執行的是類的初始化並通過對super
調用之一。最後一個,initWithName:breed:age
可能是指定的初始化程序,因爲它獲取的數據最多。它可能是這樣實現的:
- (id)initWithName:(NSString *)name breed:(CatBreed)breed age:(NSUInteger)age {
if (self = [super init]) {
_name = [name copy];
_breed = breed;
_age = age;
}
return self;
}
這可以完成設置實例的所有工作。其他初始化程序將根據這個實現。例如,另外一個可能實現這樣的:
- (id)initWithName:(NSString *)name {
return [self initWithName:name breed:CatBreedTabby age:0];
}
所以要改變一個子類的初始化行爲,你只需要改變指定初始化,你會得到別人的自由。
有關更多詳細信息,請參閱http://developer.apple.com/library/ios/#documentation/general/conceptual/CocoaEncyclopedia/Initialization/Initialization.html – 2013-04-10 22:39:11
中的「多個初始化程序和指定初始化程序」小澄清:' [super init]'是對*超類的*初始化程序的調用 - 它不是所討論類的指定初始值設定項。 – Chuck 2013-04-10 22:52:52