2015-09-09 61 views
0

這是什麼說法,如蘋果DOC聲明:指定的初始化程序?

有時一個超類的指定初始化可能是足夠的子類,所以沒有必要爲子類來實現自己的指定初始化。其他時候,一個類的指定初始值設定項可能是其超類指定初始值設定項的重寫版本。當子類需要補充由超類的指定初始化器執行的工作時,即使子類沒有添加任何它自己的實例變量(或者它添加的實例變量不需要顯式初始化),這也經常是這種情況。

Apple's Documentation

難道說,我沒有創建子類和超類指定初始化就足夠了,如果是如何將子類的屬性初始化一個指定初始化?並在什麼情況下,如果這允許?這將如何工作?

此外,如果您重寫了DI,您如何從子類調用該方法,因爲父類與您具有相同的DI?這是什麼意思,它需要補充工作?

回答

3

實施例:

有一個超類AinitWithName: DI。

現在您創建子類B。如果您需要相同的DI,並且您不需要任何額外的初始化,那麼與init方法無關。您只需撥打:

B *someBObject = [[B alloc] initWithName:@"A Name"]; 

這將創建B對象,並調用從AinitWithName:方法。

現在,如果你B類需要做輔助工作的initWithName:方法,那麼您添加到B.m

- (instancetype)initWithName:(NSString *)name { 
    self = [super initWithName:name]; 
    if (self) { 
     // do some additional stuff to initialize this "B" instance 
    } 

    return self; 
} 
+0

對於第一部分的說法是在我沒有任何的init方法的情況是什麼在我的子類中,但我確實有其他方法和屬性,但如果調用DI init方法,子類中的屬性和方法是否也會初始化?或者它只是父類和初始化的類? –

+0

如果您在子類中有任何必須被初始化的東西,那麼您的子類必須覆蓋任何需要的初始化器,以便它可以正確地初始化這些值。 – rmaddy

相關問題