Objective-C або C ++ для iOS-ігор?


18

Я досить впевнено програмую в Objective-C та C ++, але вважаю, що Objective-C є дещо простішим у використанні та більш гнучким та динамічним за своєю суттю.

Які б були плюси і мінуси при використанні C ++ замість Obj-C для написання ігор в iOS? А точніше, чи є відомі проблеми із використанням Obj-C порівняно з C ++?

Наприклад, я підозрюю, що з Obj-C можуть виникнути проблеми з продуктивністю порівняно з кодом, написаним на C / C ++.


Аналогічне запитання було задано на SO
bobobobo

Відповіді:


21

Один великий плюс на C ++: Якщо ви вирішите це зробити, перенести його на Android / PC / DS / PSP / (вставити платформу на вибір тут) буде порівняно просто. Objective-C заблокує вас в iOS, поки ви не вирішите переписати всю гру.


10
Я не згоден зі словом "легко". "Можливий" може бути кращим вибором.
3Dave

1
Так, для багатьох менших ігор (наприклад, більшості ігор для iPhone) краще просто переписати все з нуля для нової платформи, а не намагатися адаптувати код з однієї платформи для роботи на іншій. Тверда архітектура MVC мінімізувала б цей біль, але хто б це турбував за гру-3?
поштовх

3
Відносно легко! Якщо альтернатива неможлива, тоді "надзвичайно складно" порівняно легко;)
ZorbaTHut

blog.vucica.net/2011/06/… він розповідає про створення додатків Objective C для Android. Просто Linux і Linux можуть запускати Objc так само легко, як iPhone.
Злочивий кіт

Використання цілі c не заблокує вас. Використання функцій, специфічних для ядра XNU, буде. Gclang є там чомусь.

16

Тут немає жодних реальних плюсів чи мінусів, принаймні жодних, які повинні змусити програміста, зручного на одній мові, використовувати інший.

Продуктивність не повинна бути проблемою. Навряд чи ви будете писати будь-який важкий підйом з великою кількістю повідомлень у внутрішніх петлях, якщо ви хороший програміст Obj-C, а це означає, що ви справді будете писати ці внутрішні петлі в C. Якщо ви не низький програміст рівня, ймовірність того, що важке підняття буде здійснено будь-якими бібліотеками, які ви вирішили відкласти, і ви будете на милість того, що вони вирішили зробити.

Переносність - це справжнє питання, якщо ви її хвилюєте. Якщо ні, то мех. Бути крос-платформою - це ще не все, що все. Бути успішним на першому було б добре :) Ви завжди можете пізніше перенести порт. Якщо ви все-таки ретельно не плануєте бути крос-платформою з першого дня, просто перебуваючи на одній мові, ви далеко не досягнете цього: між платформами, які потребують адреси, є багато подальших реальних відмінностей.

Завершення проекту важливіше, ніж бажання про техніку, і якщо ви більш продуктивні в Obj-C, тоді залишайтеся в Obj-C.

Мої переваги? Я хлопець С ++. Я як Obj-C просто відмінно, але я щасливий в C ++, і я робити записи крос - код платформи.


5
Я дуже погоджуюся з порадою зосередитись на завершенні проекту будь-якими інструментами, з якими ви найбільш продуктивні. Уникнення передчасної оптимізації не стосується лише написання коду, це хороший спосіб наблизитись до життя.
поштовх

4

Проблем із продуктивністю у Obj-C над C ++ немає. Обидва складають код і нагадують, що Obj-C - це супернабір C, а Obj-C ++ - це набір C ++, що чудово, коли ви хочете змішати Obj-C і C ++ в одній програмі (легко зробити і XCode має гарну підтримку зі сторони C ++). Усі комбінації мов підтримують OpenGL, тому будь-яка серйозна робота з графікою - це нормально, а підтримка бібліотеки нормальна для Apple, незалежно від мови.

Це сказав, яка мета вашої гри?

  • Якщо ви пишете виключно для IOS, тоді не хвилюйтеся та пишіть якою б мовою чи комбінацією вам не зручніше. Для мене це, як правило, Obj-C ++ зі STL, оскільки це моя улюблена частина C ++. Оскільки я віддаю перевагу Obj-C трохи більше C ++, я схильний використовувати цей варіант.

  • Якщо ви пишете з метою перенесення на інший пристрій, пишіть на C ++ із шаром перекладу в Obj-C, щоб мати справу з будь-якими специфічними для пристрою матеріалами (графікою, входом, камерою, ...), куди дзвонять вхідні точки у вашій заявці.

  • Якщо ви найчистіша і хочете лише одну мову, пишіть у Obj-C.

Інші говорили про інші бібліотеки (фізику та ін.). Немає жодних проблем із доступом до будь-якого з мовних варіантів, якими ви говорите (Obj-C, C ++ або Obj-C ++). У вас також не виникне жодних проблем із ефективністю роботи цих бібліотек будь-якою мовою.

Застереження: Існує непрямий дзвінок вказівника з передачею повідомлення. Я не впевнений, наскільки ви можете інтерпретувати це як накладні витрати, оскільки я впевнений, що це точно так само, як і успадкований виклик методу C ++. Хтось може це уточнити?

Сподіваюся, що це допомагає,

Лі.


1
Хороші бали, але чи дійсно ви хочете написати свій Vector3Dклас в Obj-C? Моє відчуття кишечника говорить мені, що це може призвести до поганої роботи.
Мартін Вікман

1
Ось тільки це. Obj-C - це C. Не проблема продуктивності. Якщо ви перейдете до стандартних файлів заголовків з XCode, ви знайдете, що основними типами є лише C структури.
Лі

2
Повідомлення накладних повідомлень з Obj-C є трохи вище, ніж C ++, оскільки воно більш динамічне. Це звичайно НЕ "точно так само". Наприклад: див. developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/…
Енді Дент

1

Це залежить саме від того , що ви програмуєте. Якщо це в основному логічна гра з використанням існуючих фізичних і графічних двигунів, я сміливо можу сказати, що я не бачу причин використовувати c або c ++, якщо вам зручніше з obj-c. Якщо ви збираєтеся виконувати заняття з рендерінгу або фізики, я, ймовірно, напишу ті, що використовують c або c ++. Cocos2d - це чудова і одна з найпопулярніших бібліотек ігор для iOS, написана в obj-c.

Ознайомтеся з цим читанням - відповідна частина - це "розподіл праці", може допомогти вам вирішити, коли кодувати мовою вищого рівня та коли використовувати нижчий рівень: Керований код в іграх

Хоча накладні витрати на об'єкт-c не повинні бути поблизу C # і навіть не керуються ними (на iOS), я вважаю, що логіка все ще застосовується, а пристрої, на яких працює iOS, також не такі сильні, як ПК, що інтерпретував MSIL :)


2
Код Obj-C не керується на iOS. Наприклад (і зокрема) Obj-C має сміттєзбірник при програмуванні для OSX, але він не має сміттєзбірника на iOS.
поштовх

@jhocking Я ніколи не говорив, що ним керували, хіба ще немає накладних витрат при використанні obj-c на відміну від c ++? Я згадав c # vs c ++, це було не де поблизу obj-c vs ​​c ++
Zaky German

Коли ви публікуєте посилання під назвою "Керований код в іграх", коли говорите про Obj-C, я вважаю, що ви думаєте, що ви вважаєте, що Obj-C управляється кодом. Що це на OSX, тільки не на iOS. Вигляд goofy, як ніби Java компілюється для машинного коду на деяких платформах, але працює на JVM на інших.
поштовх

о, і я не знаю, чи є Obj-C якісь накладні витрати порівняно з C ++. Ось чому я не публікую відповідь сам.
поштовх

1
@jhocking немає сер :) "Справа в тому, що модель" зберегти / випустити "в" Objective-C "- це приблизно середнє місце від управління пам'яттю до базового GC, тому ви вже випереджаєте криву." interfacelab.com/objective-c-memory-management-for-lazy-people
Zaky German

1

У цьому дослідженні сказано, щоб дійсно досягти продуктивності в інтенсивній процесорній грі, ви повинні використовувати C. Пов'язана стаття є комплектом із проектом XCode, який ви можете запустити.

Я вважаю, що підсумок : Використовуйте Objective-C, де ви повинні взаємодіяти з функціями iPhone (зрештою, розміщення батутів скрізь не може бути корисним для когось ), але коли мова йде про петлі, такі речі, як векторні класи об'єктів, або інтенсивні доступ до масиву, дотримуйтесь C ++ STL або C масивів, щоб отримати хороші показники.

Я маю на увазі, це було б абсолютно нерозумно position = [[Vector3 alloc] init] ;. Ви просто вимагаєте звернення до ефективності, якщо ви використовуєте підрахунки посилань на основні об'єкти, такі як вектор позиції.

Дивіться також ці порівняння,

порівняння


Downvoter? Будь ласка, поясніть.
bobobobo
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.