次のような 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 番目のプロジェクトでは何らかの形で失敗します。
ここで何が起こっているかの手がかりはありますか?どうもありがとう!