web-dev-qa-db-ja.com

Objective-C、.m / .mmパフォーマンスの違い?

新しいクラスを作成するときは、デフォルトで.mm拡張子を使用する傾向があるため、必要に応じて後でObjC++を使用できます。

これを行うことに不利な点はありますか?いつご希望ですか.m?します.mより高速な実行可能ファイルにコンパイルします(Cは一般にC++よりも高速であるため)?

29
Sam

「通常の」Objective-Cで.mmよりも.mを使用する場合の主な欠点は、Objective-C++のコンパイル時間が大幅に長くなることです。これは、C++コンパイラーがCコンパイラーよりも時間がかかるためです。 Xcode 3.2以降では、Objective-Cコードで Clang フロントエンドツールチェーンを使用して、Objective-C/Cのコンパイル時間を大幅に短縮できます。 ClangはまだObjective-C++/C++をサポートしていないため、2つの間のコンパイル時間のギャップがさらに広がります。

より良い戦略は、デフォルトで.mを使用することです。開発の後半でObjective-C++を使用する必要がある場合、.mm拡張子を使用するようにファイルの名前を変更しても害はありません。 XCode内からそうする場合、プロジェクトは自動的に更新され、新しく名前が付けられたファイルを使用します。

もちろん、実行時にObjective-C++とObjective-Cのパフォーマンスを比較しようとすると、すべての標準的な警告が適用されます。 Objective-C++はC++スーパーセットであり、Objective-CはCスーパーセットであるため、実行時にパフォーマンスのトレードオフを持つ2つの異なる言語を扱っています。 Objective-Xをまったく使用している場合、ユーザーレベルのアプリケーション(システムレベルのアプリではない)を作成している可能性が高く、CとC++のパフォーマンスの違いは、効率的なアルゴリズムをコーディングする能力によって完全に決定される各言語。あなたがC++開発者であれば、おそらくCよりもコードが上手くなり、その逆も同様です。そのため、いつものように、ジョブに適したツールを使用してください。

参考までに、この回答にも興味があるかもしれません: C vs C++(Objective-C vs Objective-C++)for iPhone

UPDATE 2012年2月17日Xcode 4.0(LLVM 3.0)の時点で、ClangはObjective-C++をサポートしています。 C++ 11のサポートでさえ、今ではかなり強力です。

44
Barry Wark

Cの機能のみを使用する場合、.mmファイルは.mと非常によく似たコードを生成するはずです。

また、後でC++機能が必要になったときに、ファイルの名前を.mから.mmに変更しても不都合はありません。

8
rpetrich