在init中引发异常时如何防止泄漏?

ste*_*vex 2 memory-leaks memory-management objective-c

这是情况.假设我有一个名为MYFoo的课程.这是初始化程序:

-init
{
  self = [super init];
  if (self)
  {
    // during initialization, something goes wrong and an exception is raised
    [NSException raise ...];
  }
  return self;
}
Run Code Online (Sandbox Code Playgroud)

现在我想在其他地方使用MYFoo对象,所以我使用了一个常见的模式:

MYFoo *foo = [[[MYFoo alloc] init] autorelease];
Run Code Online (Sandbox Code Playgroud)

但是会发生什么,即使第二部分有一个try/catch,一个MYFoo对象将被分配,异常将被抛出,自动释放错过,未初始化的MYFoo对象将泄漏.

这里应该发生什么来防止这种泄漏?

Don*_*yrd 8

苹果的文档说,最好的做法是不要乱扔.

处理初始化失败

通常,如果在初始化方法期间出现问题,则应调用[self release]并返回nil.

如果你需要知道发生了什么,你可以init在对象和有某种内部状态是被调用者检查,以确保该对象是可用的.