2012-04-17 10 views
3

iPhoneアプリケーション用のXCodeでC++例外処理を有効にすることの結果を知っている人はいますか?デフォルトでは無効になっているようです。iPhone C++/Objective-C例外

C++例外とObjective C例外は同じであるか、またはC++例外のみがC++コードによって捕捉され、その逆の場合もありますか?

おかげ

+0

LLDBについては、 C++のサポートは限られています(ObjC++の「神聖な結婚」のために) – CodaFi

答えて

2

誰もがiPhoneアプリのためにXcodeでC++例外処理を有効にするの結果を知っているのですか?

これは、C++例外処理のための通常の選択です。 C++ライブラリを使用している場合、にはが必要です。

例外がイメージの境界を越えてきれいに伝播するとは決して考えないでください。つまり、からまでの基底フレームを投げ、反対側をキャッチすると定義されていると仮定することはできません。 IOW、MyLib-> Through Foundation-> MyAppをキャッチするは、未定義の動作を引き起こします。ですから、MyLibでこれらを捕らえる必要があると仮定する必要があります。

OS Xとは異なり、iPhoneのC++例外およびObjC例外は「ゼロコスト例外」を使用してではなく、で実装されています。サイズを超えた実行速度を優先するゼロコスト例外は、アンワインドテーブルのサイズとコンパイラサポートのために使用されませんでした。

例外を有効にするには、速度とサイズが必要です。ほとんどの場合、iOSのほとんどのプログラムで10%未満です。

は最終的に、 は例外が有効にするかどうかを決定しなければならないを必要とする、と彼らは 一部実行し、サイズのオーバーヘッドをご紹介します。非常に特殊化されたC++ライブラリで作業している場合を除き、それらを有効にする必要があると想定する必要があります。ただし、この機能はサポートされています。

は同じC++とObjective Cの例外はありますかC++例外は唯一のC++コードとその逆でキャッチすることができますか?

64ビットOS XおよびiOS環境では、どちらのハンドラを使用してもC++およびObjCの例外をキャッチできます。 32ビットOS Xでは、異なる例外モデルを使用します。したがって、langで書かれた 'catch all'式は、をキャッチすることができます。 iOSと64ビットOS XではC++とObjC例外が発生しますが、32ビットOS Xでは発生しません。

+0

良い答え。これらのことを綴る文書に適切なリンクを追加すると、特に32ビットと64ビットの違いに加えて、さらにうまくいくでしょう。 – Caleb

+0

@Calebいくつかは、Appleの "例外プログラミングトピック" – justin

関連する問題