[英]Designated Initializer?
蘋果文檔中所說的是什么意思:
有時,超類的指定初始化器可能足以滿足子類的需要,因此子類無需實現自己的指定初始化器。 在其他時候,類的指定初始化器可能是其超類的指定初始化器的替代版本。 當子類需要補充超類的指定初始化程序執行的工作時,通常會發生這種情況,即使子類沒有添加自己的任何實例變量(或者它添加的實例變量也不需要顯式初始化)。
就是說我不必為子類創建指定的初始化程序,而超類指定的初始化程序就足夠了,如果可以的話,子類的屬性將如何初始化? 如果允許,在什么情況下? 那將如何工作?
另外,如果您覆蓋DI,那么您如何從子類中調用該方法,因為父類與您具有相同的DI? 需要補充工作是什么意思?
例:
有A
具有initWithName:
DI的超類A
現在創建子類B
如果您希望使用相同的DI,並且不需要任何其他初始化,那么init
方法就沒有關系。 您只需致電:
B *someBObject = [[B alloc] initWithName:@"A Name"];
這將創建B
對象,並從A
調用initWithName:
方法。
現在,如果您的B
類需要在initWithName:
方法中做補充工作,則可以將其添加到Bm
:
- (instancetype)initWithName:(NSString *)name {
self = [super initWithName:name];
if (self) {
// do some additional stuff to initialize this "B" instance
}
return self;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.