2011-09-09 35 views
2

可能重複:
In Objective-C why should I check if self = [super init] is not nil?實現像這樣的Objective C init方法有什麼意義?

我常常看到這樣的: 「如果(自= [超級初始化])」 建設,我不知道爲什麼它的完成。

- (id) init { 

    if (self = [super init]) { 

    // how could self = [super init]; ever fail? 

    } 

    return self; 

} 
+0

感謝您的評論,這是一個騙局。我投票結束而不是刪除......我不確定什麼是正確的方式。 –

+0

同樣的區別。當您投票結束時,請選擇「完全重複」,您將能夠指定重複的郵件。據我所知,評論是自動的。 –

回答

4

想象一下你的超做到這一點:

- (id)init { 
    self = [super init]; 

    if (self) { 
     self->foo = CreateExpensiveWidgetOverTheInternetByTrain(); 
     if (!self->foo) { 
      // widget creation failed, bail out 
      [self release]; 
      self = nil; 
     } 
    } 

    return self; 
} 

那怎麼。 ;)

1

有多種方式[super init]可能失敗:

  1. 您正試圖子類「final」類,即,已經專門設計不允許子類之一。

  2. 你內存不足,運氣不好。

  3. initWithArgument:parameter:的情況下;您提供了無效的參數或參數。

此外,其他不太明顯的方法;這通常是最危險的。

0

the documentation

一般來說,如果一個初始化方法中有一個問題,你應該叫上selfrelease方法並返回nil

有此政策的兩個主要後果:

  • 任何對象都從一個初始化方法接收nil(自己的類,子類,或外部來電者是否)應該能夠對付它。在調用者在調用之前已經建立了對該對象的任何外部引用的情況下,你必須撤銷任何連接。
  • 在部分初始化對象的存在下,您必須確保dealloc方法是安全的。
相關問題