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