簡體   English   中英

指定初始化程序?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM