Ich bin ziemlich sicher in Objective-C und C ++ zu programmieren, aber ich finde, dass Objective-C etwas einfacher zu bedienen und flexibler und dynamischer ist.
Was wären die Vor- und Nachteile, wenn Sie C ++ anstelle von Obj-C für das Schreiben von Spielen unter iOS verwenden? Oder gibt es bekannte Probleme bei der Verwendung von Obj-C im Vergleich zu C ++?
Ich vermute zum Beispiel, dass es Leistungsprobleme mit Obj-C im Vergleich zu in C / C ++ geschriebenem Code gibt.
c++
ios
performance
objective-c
Martin Wickman
quelle
quelle
Antworten:
Ein großer Vorteil von C ++: Wenn Sie sich dafür entscheiden, ist es relativ einfach, auf Android / PC / DS / PSP / zu portieren (fügen Sie hier die Plattform Ihrer Wahl ein). Objective-C wird Sie an iOS binden, bis Sie sich dazu entschließen, das gesamte Spiel neu zu schreiben.
quelle
Hier gibt es keine wirklichen Vor- oder Nachteile, zumindest keine, die einen Programmierer, der sich in einer Sprache wohlfühlt, dazu zwingen sollten, die andere zu verwenden.
Leistung sollte kein Problem sein. Wenn Sie ein guter Obj-C-Programmierer sind, ist es unwahrscheinlich, dass Sie in den inneren Schleifen eine schwere Übung mit viel Messaging schreiben, was bedeutet, dass Sie diese inneren Schleifen wirklich in C schreiben werden Level-Programmierer, es besteht die Möglichkeit, dass das schwere Heben von den Bibliotheken durchgeführt wird, die Sie ausgewählt haben, um dies ebenfalls aufzuschieben, und Sie sind dem ausgeliefert, was auch immer sie tun.
Portabilität ist ein echtes Problem, wenn Sie sich darum kümmern. Wenn nicht, dann meh. Plattformübergreifend zu sein ist nicht das Ende von allem. Ein erster Erfolg wäre schön :) Sie können später immer portieren. Wenn Sie ohnehin nicht sorgfältig planen, ab Tag 1 plattformübergreifend zu sein, werden Sie mit der gleichen Sprache nicht weit kommen: Es gibt viele weitere echte Unterschiede zwischen Plattformen, die angesprochen werden müssen.
Das Projekt abzuschließen ist wichtiger als sich über die Technologie zu ärgern. Wenn Sie in Obj-C produktiver sind, bleiben Sie in Obj-C.
Meine Vorliebe? Ich bin ein C ++ - Typ. Ich mag Obj-C ganz gut, aber ich bin glücklich , in C ++, und ich tue Schreib Cross - Plattform - Code.
quelle
Es gibt keine Leistungsprobleme mit Obj-C über C ++. Beide sind kompilierter Code und erinnern daran, dass Obj-C eine Obermenge von C und Obj-C ++ eine Obermenge von C ++ ist. Dies ist großartig, wenn Sie Obj-C und C ++ in demselben Programm mischen möchten (einfach zu tun und XCode) hat nette Unterstützung für die C ++ Seite). Alle Sprachkombinationen unterstützen OpenGL, daher ist jede ernsthafte Grafikarbeit in Ordnung und die Bibliotheksunterstützung ist für Apple unabhängig von der Sprache in Ordnung.
Das heißt, was ist der Zweck Ihres Spiels?
Wenn Sie ausschließlich für IOS schreiben, machen Sie sich keine Sorgen und schreiben Sie in einer Sprache oder Kombination, in der Sie sich wohler fühlen. Für mich ist dies zufällig Obj-C ++ mit STL, da dies mein Lieblingsteil von C ++ ist. Da ich Obj-C gegenüber C ++ etwas bevorzuge, benutze ich diese Option.
Wenn Sie mit dem Ziel schreiben, auf ein anderes Gerät zu portieren, schreiben Sie in C ++ mit einer Übersetzungsebene nach Obj-C, um alle gerätespezifischen Aufgaben (Grafiken, Eingaben, Kameras usw.) zu erledigen, an die die Anrufe getätigt werden Einstiegspunkte in Ihre Anwendung.
Wenn Sie ein Reiner sind und nur eine Sprache wollen, schreiben Sie in Obj-C.
Andere haben über andere Bibliotheken (Physik und dergleichen) gesprochen. Es gibt absolut keine Probleme mit dem Zugriff auf eine der von Ihnen angesprochenen Sprachen (Obj-C, C ++ oder Obj-C ++). Außerdem treten bei diesen Bibliotheken in keiner Sprache Leistungsprobleme auf.
Eine Einschränkung: Es gibt einen Zeiger-Indirektionsaufruf mit Nachrichtenübergabe. Ich bin mir nicht sicher, wie viel Sie als Overhead interpretieren können, da ich mir ziemlich sicher bin, dass dies genau dasselbe ist wie ein geerbter C ++ - Methodenaufruf. Kann das jemand klären?
Hoffentlich hilft das,
Lee.
quelle
Vector3D
Klasse in Obj-C schreiben ? Mein Bauchgefühl sagt mir, dass dies zu einer schlechten Leistung führen könnte.Es kommt genau darauf an was Sie programmieren. Wenn es hauptsächlich um Spielelogik mit vorhandenen Physik- und Grafik-Engines geht, kann ich mit Sicherheit sagen, dass ich keinen Grund sehe, c oder c ++ zu verwenden, wenn Sie mit obj-c besser umgehen können. Wenn Sie Rendering- oder Physikkurse einführen wollen, würde ich diese wahrscheinlich mit c oder c ++ schreiben. Cocos2d - das ist eine wunderbare und eine der beliebtesten iOS-Spielebibliotheken, die in obj-c geschrieben ist.
Schauen Sie sich diese Lektüre an - der relevante Teil ist "Arbeitsteilung". Dies kann Ihnen bei der Entscheidung helfen, wann Sie in einer höheren Sprache codieren und wann Sie eine niedrigere Version verwenden sollten: Verwalteter Code in Spielen
Während Objective-C-Overhead nicht in der Nähe von C # sein sollte und nicht einmal verwaltet wird (unter iOS), glaube ich, dass die Logik immer noch zutrifft, und Geräte mit iOS sind auch nicht annähernd so stark wie der PC, der MSIL interpretieren würde :)
quelle
Diese Studie besagt, dass Sie C verwenden müssen, um die Leistung in einem CPU-intensiven Spiel wirklich zu erzielen. Der verknüpfte Artikel enthält ein XCode-Projekt, das Sie ausführen können.
Meiner Meinung nach lautet das Fazit : Verwenden Sie Objective-C, bei dem Sie mit den Funktionen des iPhones interagieren müssen ( Trampoline überall zu platzieren, kann schließlich für niemanden gut sein ), aber wenn es um Schleifen, Dinge wie Vektorobjektklassen oder Intensiv geht Halten Sie sich beim Array-Zugriff an C ++ STL- oder C-Arrays, um eine gute Leistung zu erzielen.
Ich meine, es wäre total albern zu sehen
position = [[Vector3 alloc] init] ;
. Sie fragen nur nach einem Leistungstreffer, wenn Sie Referenzzählungen für grundlegende Objekte wie einen Positionsvektor verwenden.Siehe auch diese Vergleiche,
quelle