2012-08-01 62 views
0

可能重複:
Why should I call self=[super init]當我不得不使用自= [超級初始化]

我一直在讀一本書,目標C,並創建一個包含其他類的類(組成)它使用自己= [超級初始化]

- (id) init 
{ 
    if (self = [super init]) { 
     engine = [Engine new]; 

     tires[0] = [Tire new]; 
     tires[1] = [Tire new]; 
     tires[2] = [Tire new]; 
     tires[3] = [Tire new]; 
    } 

    return (self); 

} // init 

而當他正在創建另一類,他不包括這個它的方法,我明白它需要初始化它將要使用的實例對象,但我不明白他爲什麼要把self = [super init]和一個類需要這個語句。

@interface Tire : NSObject 
@end // Tire 


@implementation Tire 

- (NSString *) description 
{ 
    return (@"I am a tire. I last a while"); 
} // description 

@end // Tire 
+0

您可以包括在不使用這種方法的其他類的例子嗎?那麼解釋起來會更容易一些。 – jrturton 2012-08-01 07:31:41

+0

像輪胎類,它只需要新的消息或頁頭] INIT]開始,但爲什麼這個類的init方法需要自我= [超級的init]的[我爲什麼要叫自我= \ – Pedro 2012-08-01 07:35:54

+1

可能重複[超級初始化\]? ](http://stackoverflow.com/q/2956943/),[爲什麼使用self = \ [super init \]而不是\ [super init \]?](http://stackoverflow.com/q/10139765 /),[爲什麼在構造函數中使用\ [super init \]](http://stackoverflow.com/q/9283004/),[self = \ [super init \] revisited](http://stackoverflow.com/q/9554249 /),[self = \ [super init \]](http://stackoverflow.com/q/10779937/),[自我分配給\ [super init \]的作用是什麼?]( http://stackoverflow.com/q/5594139/) – 2012-08-01 07:49:11

回答

0

new是一個類方法,它簡單地告訴一個類對自己執行alloc/init。它被記錄爲here。上面的代碼可以被改寫爲:

- (id) init 
{ 
    if (self = [super init]) { 
     engine = [[Engine alloc] init]; 

     tires[0] = [[Tire alloc] init]; 
     tires[1] = [[Tire alloc] init]; 
     tires[2] = [[Tire alloc] init]; 
     tires[3] = [[Tire alloc] init]; 
    } 

    return (self); 

} 

而且,它還將具有完全相同的效果,但涉及到更多的輸入。

的引擎和輪胎類中,它們的init方法(如果實現的話)將使用self = [super init]。如果你的類並沒有做什麼特別的init方法,你並不需要實現一個,但如果你做實現一個,你必須因爲你需要將對象正確創建使用self = [super init],和你的父類可能是在init方法中做重要的工作。

+0

感謝你的解釋非常清楚,我真的很困惑這個說法,但現在我明白了=) – Pedro 2012-08-01 15:06:20