2

我有一个自定义类 MBIKioku,它的 init 方法如下:

- (id)initWithSize:(int)size
{
    if(self = [super init])
    {
        // do stuffs
    }
    return self; // breakpoint A
}

我像这样在我的视图控制器中使用它

@implementation MBIKiokuViewController
{
    MBIKioku *kioku;
    // other instance variables
}

- (void)loadLevel:(int)level
{
    kioku = [[MBIKioku alloc] initWithSize:3];
    // do stuffs (breakpoint B)
}

我第一次调用 loadLevel: 时,一切正常。但是,第二次返回 nil!

我尝试在 return self 之前(断点 A)和初始化之后(断点 B)放置一个 break 并通过调试器运行它。这是我学到的:

  • 在能够继续执行之前,您实际上需要在断点 A 上按两次继续。第一次按 continue 时,self 将设置为 nil。不知道背景中发生了什么伏都教(一些 ARC 的东西?)。然而,在第一次调用 initWithSize: 时,调用者正确地获得了一个非零值。
  • 第二次 initWithSize: 被调用,调用者总是得到 nil!因此,在第二次执行时,断点 B 上的 kioku 的值将为零。

这实际上是一段代码,在我的另一个项目上运行良好,但在我的第二个项目上却以某种方式失败。

关于这里发生了什么的任何线索?非常感谢!

4

0 回答 0