2011-08-29 50 views
3

我運行此代碼在5類的實例:當你運行self = [super init]並返回nil時,什麼是正確的響應?

-(id)init { 
    self = [super init]; 
    if (self) { 
     // my init code here 
    } 
    return self; 
} 

...和自我回報爲零。我知道這是正確的程序,應該完成。但是,如果自我回歸零,我的迴應是什麼?拋出警告程序失敗並正在終止?忽略它 ?或者是否有推薦的程序安全地繼續?

回答

3

我知道它聽起來是遞歸的,但我認爲在這種情況下最好的辦法是返回零。

當從初始值設定項返回一個零值時,您無法真正預測該對象的狀態,因此最安全的事情就是處理該對象。從初始化程序,這意味着只是返回零給調用者。

當alloc] init] ing時,在我看來,這種情況總是會導致泄漏,所以我一直很猶豫,只是簡單地調用alloc] init。

2

我從來沒有親眼見過它發生過。但是因爲objc處理的時間很少,所以我不會擔心超出你已經做的特殊情況,通過返回你從超級中收到的零。

+0

我把它看作Objective-C的一個錯誤,可以讓你發送消息給nil。這意味着你可能會耗盡內存,直到很長一段時間後,當你不知道如何優雅地處理問題時,纔會發現它。 –

+1

你將如何精確地用完內存? –

+1

@Don從-init方法返回nil表示初始化過程失敗。如果你的內存不足,+ alloc將返回零,-init永遠不會被調用。我更喜歡Objective-C範例。每當您創建一個新對象或收到一個對象作爲方法參數時,您忘記檢查返回值,您不必擔心NULL指針異常。你只需要明確地檢查你的應用中重要的那些。 –

相關問題