2

次のような init メソッドを持つカスタム クラス MBIKioku があります。

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

そして、私はそれをView Controller内で次のように使用します

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

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

loadLevel: を初めて呼び出すと、すべてが完全に機能します。ただし、2 回目は nil を返します。

return self の前 (ブレークポイント A) と初期化の後 (ブレークポイント B) にブレークを設定して、デバッガーで実行してみました。これが私が学んだことです:

  • 実行を続行するには、実際にブレークポイント A で 2 回続けて押す必要があります。最初に続行を押すと、self は nil に設定されます。バックグラウンドで何のブードゥーが起こっているかわかりません (いくつかの ARC のもの?)。ただし、initWithSize: が初めて呼び出されると、呼び出し元は nil 以外の値を適切に取得します。
  • 2 回目に initWithSize: が呼び出されると、呼び出し元は常に nil になります。したがって、ブレークポイント B の kioku の値は、2 回目の実行では nil になります。

これは、実際には私の他のプロジェクトでは問題なく動作しているコードですが、2 番目のプロジェクトでは何らかの形で失敗します。

ここで何が起こっているかの手がかりはありますか?どうもありがとう!

4

0 に答える 0