0

このコードを使用して UIWindow を作成しています

UIMyWindow* win = [[UIMyWindow alloc] 
                   initWithFrame:[[UIScreen mainScreen] applicationFrame]];

UIMyWindow は特別なものではなく、ObjectiveC のラッピングを行う C++ クラスへのポインタを持っているだけです。

最近、エラーで何もする必要のないコード行を追加した後、アプリケーションがクラッシュし始めました。追加したコード行は C++ オブジェクトを割り当てているだけですが、プログラムの実行はこの行に到達しません。

興味深いことに、私のコードは Release で動作します。

私の唯一の推測は、まったく別の場所でメモリ破損を起こしたことです。私の質問は次のとおりです。どのような種類のメモリ破損が発生する可能性がありますか? そして、それらを追跡するための良い慣行はありますか?

4

1 に答える 1

1

確かに、割り当て解除されたオブジェクトに送信されるメッセージがあります。

Instruments.app を使用してプログラムをデバッグしてみてください。潜在的なメモリの問題が表示されるはずです。

NSZombieEnabled環境変数も見てください。基本的に、割り当てが解除されたオブジェクトの場所にダミー オブジェクトが残ります。そのダミー オブジェクトにメッセージが送信されると警告が表示され、問題の場所を確認できます。

于 2010-06-03T08:20:08.240 に答える