2009-04-21 25 views
0

私は、NSMutableArrayにクラスPersonのオブジェクトを追加する場所を書いた小さなCocoa Appsで遊んでいます。アレイの限界を超えているオブジェクトにアクセスしようとすると、コンソール上に「境界を越えて」というメッセージが表示されます。範囲外のCocoa/Objective-C配列

実際、私はさらに悪いことを予想していました。私はアプリがクラッシュすると思った!しかし、それはしません。

これは良いことか悪いことか分かりませんが、アプリ内で何が起こってクラッシュするのを防ぐのか不思議です。私はいつも私がそこにいない記憶のオブジェクトにアクセスしているという考えを持っていました。ノーマリーは、すべてのアプリケーションを殺すでしょう。

答えて

5

NSArrayオブジェクトを介してインターフェイスしているため、実際には不正なメモリに直接アクセスすることはできません。その代わりに、オブジェクトに悪いインデックスを与えていて、例外をスローすることによってあなたに通知していることが起こっています。

デフォルトでは、NSApplicationアプリケーションのメインスレッドで発生する例外によってアプリケーションが終了することはありません。代わりに、エラーを記録して現在の実行ループサイクルを中止し、次のサイクルを開始します。

デバッグフェーズでこれらの例外を処理する方法の詳細については、this documentを参照してください。アプリケーションレベルの例外を扱うときに使用できるさまざまなテクニックと応答について説明します。

また、悪いメモリを読み書きすることによってアプリケーションがクラッシュするとは限りません。そのため、これらの種類のエラーを追跡するのが難しい場合があります。代わりに、単に他のオブジェクトを破壊することができ、アプリケーションのサイクルの後半になるまであなたがそうしたことを知らないことがあります。ここで覚えておくべき重要なことは、NSApplicationがメインスレッドで起こっているほとんどの例外を盛り倒すので、それに特別な注意を払わなければならないということです。

関連する問題