leo*_*leo 11 memory cocoa objective-c init
当init内部出现故障时,我是否应该始终释放self,或者如果我先初始化实例变量,我是否应该这样做?
换句话说,这种模式是否有效?有没有时间我不应该在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;
}
Run Code Online (Sandbox Code Playgroud)
Bra*_*nar 17
如果你的初始化方法中的某些检查失败了,那么你应该释放self.但是请注意,如果[super init]回报率nil是没有意义送释放self为self是nil.这实际上是Apple不赞成的:
你应该只
[self release]在失败时打电话.如果nil从超类的初始化程序的调用中返回,则不应该调用release.
例:
- (id)init
{
self = [super init];
if(self) {
// do some init stuff
if (somethingFailed)
{
[self release]
self = nil;
}
}
return self;
}
Run Code Online (Sandbox Code Playgroud)
另请参阅处理初始化失败的Mac开发中心文档