11
當我在初始化內部發生故障時,是否應該始終釋放自我,或者是否應該只在首次初始化實例變量時才這樣做?我應該始終爲失敗的初始化方法釋放自我嗎?
換言之,這種模式是否有效?是否有一段時間我不應該在init方法中釋放self,或者我應該假設如果控制流進入init,self至少有一個保留計數爲1?
- (id)init
{
if ((self = [super init]) == nil)
{
[self release];
return nil;
}
//do some init stuff
if (somethingFailed)
{
[self release];
return nil;
}
return self;
}
阿Mac開發中心的文件,現在你指出來一點非常明顯。我有點被拋棄,因爲我調用了一個對象,我沒有調用alloc/copy/new等。 – leo 2010-03-18 05:40:08
是的,基本的原則是,初次遇到初始化錯誤的人應該釋放init被調用的分配空間,然後返回nil。由於其他人都是零,他們沒有辦法釋放內存,所以爲什麼你應該調用release來避免內存泄漏。 – 2010-03-18 05:49:09
有道理,謝謝。 – leo 2010-03-18 05:51:23