iOSゲーム用のObjective-CまたはC ++?


18

私はObjective-CとC ++でのプログラミングにはかなり自信がありますが、Objective-Cの方が使いやすく、本質的に柔軟性と動的性が高いと感じています。

iOSでゲームを書くためにObj-Cの代わりにC ++を使用する場合の長所と短所は何ですか?むしろ、C ++と比較してObj-Cの使用に既知の問題はありますか?

例えば、私は疑いのObj-Cは、C / C ++で書かれたコードと比較してパフォーマンスの問題があるかもしれません。


回答:


21

C ++の大きな利点:そうすることを決めた場合、Android / PC / DS / PSP /に移植するのは比較的簡単です(ここにプラットフォームを挿入してください)。Objective-Cは、ユーザーがゲーム全体を書き換えるまでiOSにロックします。


10
「簡単」という言葉には同意しません。「可能」の方が良い選択かもしれません。
3Dave

1
ええ、多くの小さなゲーム(たとえば、ほとんどのiPhoneゲーム)では、あるプラットフォームのコードを別のプラットフォームで動作するように適応させるのではなく、新しいプラットフォーム用にすべてをゼロから書き直す方が良いでしょう。堅実なMVCアーキテクチャはこの痛みを最小限に抑えますが、マッチ3ゲームでそれを気にする人はいますか?
ジョッキング

3
比較的簡単です!代替案が不可能な場合、「非常に難しい」ことは比較的簡単です;)
ZorbaTHut

blog.vucica.net/2011/06/…彼は、Android向けのObjective Cアプリの構築について語っています。Linuxだけで、LinuxはiPhoneと同じくらい簡単にObjcを実行できます。
フェロナス猫

目的cを使用しても、ロックされません。XNUカーネル固有の関数を使用すると、ロックされます。Gclangには理由があります。

16

ここには本当の長所や短所はありません。少なくとも、ある言語のプログラマーが他の言語を使用しなければならないことを強制するものはありません。

パフォーマンスは問題になりません。優れたObj-Cプログラマーであれば、内部ループに大量のメッセージングを使用して重いリフティングを記述することはまずありません。つまり、実際にCで内部ループを記述することになります。レベルプログラマの場合、重いライブラリーを延期するために選択したライブラリーによっても重いリフティングが実行される可能性があります。

あなたがそれを気にするなら、移植性本当の問題です。そうでない場合は、まあ。クロスプラットフォームであることだけが目的ではありません。最初に成功することは素晴らしいことです:)いつでも後で移植できます。とにかく1日目からクロスプラットフォームになることを慎重に計画していない場合は、同じ言語でいるだけではあまり意味がありません。対処する必要のあるプラットフォームには、さらに大きな違いがあります。

プロジェクトを終了することは、技術について心配するよりも重要です。Obj-Cで生産性が向上している場合は、Obj-Cにとどまります。

私の好み?私はC ++の男です。IのObj-Cのようなだけで罰金、私はC ++で幸せだ、と私はやる書き込み、クロスプラットフォームのコードを。


5
私は、あなたが最も生産的なツールでプロジェクトを仕上げることに焦点を合わせるというアドバイスに非常に同意します。時期尚早な最適化を避けることは、コードの記述に適用されるだけでなく、人生にアプローチする良い方法です。
ジョッキング

4

Obj-C over C ++にはパフォーマンスの問題はありません。どちらもコンパイルされたコードであり、Obj-CはCのスーパーセットであり、Obj-C ++はC ++のスーパーセットであることを思い出してください。これは、同じプログラムでObj-CとC ++ C ++側をサポートしています)。すべての言語の組み合わせがOpenGLをサポートしているため、深刻なグラフィックス作業は問題なく、言語に関係なくAppleのライブラリサポートは問題ありません。

とはいえ、ゲームの目的は何ですか?

  • もしあなたがIOSのためだけに書いているなら、心配しないで、あなたがより快適に感じるどんな言語や組み合わせでも書いてください。私はC ++よりもObj-Cを好むため、このオプションを使用する傾向があります。

  • 別のデバイスへの移植を目的として作成している場合は、呼び出しが行われるデバイス固有のもの(グラフィック、入力、カメラなど)を処理するために、Obj-Cへの変換レイヤーを使用してC ++で記述します。アプリケーションのエントリポイント。

  • あなたが最も純粋で、たった一つの言語が欲しいなら、Obj-Cで書いてください。

他の人は他のライブラリ(物理学など)について話しました。あなたが話している言語の選択(Obj-C、C ++、またはObj-C ++)のいずれからもアクセスすることにまったく問題はありません。また、どの言語のライブラリでもパフォーマンスの問題は発生しません。

警告:メッセージの受け渡しを伴うポインター間接呼び出しがあります。それがどれだけオーバーヘッドとして解釈できるかはわかりません。それは、継承されたC ++メソッド呼び出しとまったく同じだと確信しているからです。誰もこれを明確にすることはできますか?

お役に立てば幸いです

リー。


1
良い点ですが、本当にVector3DObj-Cでクラスを書きたいですか?私の直感は、パフォーマンスが低下する可能性があることを示しています。
マーティンウィックマン

1
それだけです。Obj-C C です。パフォーマンスの問題でありません。XCodeを使用して標準ヘッダーファイルにアクセスすると、基になる型はC構造体であることがわかります。
リー

2
Obj-Cのメッセージオーバーヘッドは、動的であるため、C ++よりもかなり大きくなります。確かに「まったく同じ」ではありません。例:developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/…を
Andy Dent

1

プログラミングの内容によって異なります。主に既存の物理エンジンとグラフィックエンジンを使用するゲームロジックである場合、obj-cに慣れているのであれば、cまたはc ++を使用する理由は見当たらないと言えます。レンダリングクラスまたは物理クラスを展開する場合は、おそらくcまたはc ++を使用して作成します。Cocos2d-これはすばらしいもので、最も人気のあるiOSゲームライブラリの1つはobj-cで記述されています。

この記事を読んでください-関連する部分は「分業」です。高レベルの言語でコーディングするタイミングと低レベルを使用するタイミングを決定するのに役立つかもしれません: ゲームのマネージコード

Objective-CのオーバーヘッドはC#の近くではなく管理もされていないはずですが(iOSでも)、ロジックはまだ適用され、iOSを実行しているデバイスもMSILを解釈するPCほど強力ではありません:)


2
Obj-CはiOSのマネージコードではありません。たとえば(特に)OSX向けのプログラミングでは、Obj-Cにはガベージコレクタがありますが、iOSにはガベージコレクタがありません。
-jhocking

@jhocking私はそれが管理されているとは言いませんでしたが、C ++とは対照的にobj-cを使用するとオーバーヘッドはまだありませんか?私はそれがC ++対無近いOBJ-CだったC ++対言及用のC#をやった
Zakyドイツの

Obj-Cについて話しているときに「ゲーム内のマネージコード」というリンクを投稿すると、Obj-Cがマネージコードであると考えることになります。これはOSXにあり、iOSにはありません。ある種のプラットフォームではJavaがマシンコードにコンパイルされているが、別のプラットフォームではJVMで実行されているかのように、間抜けなこと。
ジョッキング

ああ、Obj-CにC ++と比較してオーバーヘッドがあるかどうかはわかりません。それが私が自分で答えを投稿していない理由です。
ジョッキング

1
@jhocking no sir :)「問題は、Objective-Cの保持/解放モデルは、メモリ管理なしから基本的なGCまでの大まかな中間点であるため、すでに先を行っています。」interfacelab.com/objective-c-memory-management-for-lazy-people
ザキードイツ語

1

この調査では、CPUを集中的に使用するゲームで実際にパフォーマンスを得るには、Cを使用する必要があると述べています。リンクされた記事には、実行可能なXCodeプロジェクトが含まれています。

私は信じている一番下の行は、(すべての後、あなたはiPhoneの機能と相互作用しなければならない使用のObjective-C:でどこでもトランポリンを置くことは誰にとっても良いことはできません)、それはループ、ベクトルオブジェクトクラスのようなもの、または集中的に来るとき配列アクセス、C ++ STLまたはC配列に固執して良好なパフォーマンスを得る。

見るのは完全にばかげているだろうposition = [[Vector3 alloc] init] ;。位置ベクトルなどの基本オブジェクトで参照カウントを使用する場合、パフォーマンスヒットを求めているだけです。

これらの比較もご覧ください。

comparisons


ダウンボッター?説明してください。
ボボボボ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.