Я довольно уверенно программирую на Objective-C и C ++, но я считаю, что Objective-C несколько проще в использовании и более гибок и динамичен по своей природе.
Какие были бы плюсы и минусы при использовании C ++ вместо Obj-C для написания игр в iOS? Или, скорее, есть ли известные проблемы с использованием Obj-C по сравнению с C ++?
Например, я подозреваю, что с Obj-C могут возникнуть проблемы с производительностью по сравнению с кодом, написанным на C / C ++.
c++
ios
performance
objective-c
Мартин Викман
источник
источник
Ответы:
Один большой плюс в C ++: если вы решите сделать это, будет относительно легко портировать на Android / PC / DS / PSP / (укажите платформу здесь). Objective-C заблокирует вас в iOS, пока вы не решите переписать всю игру.
источник
Здесь нет настоящих плюсов и минусов, по крайней мере, нет таких, которые заставили бы программиста, комфортно владеющего одним языком, использовать другой.
Производительность не должна быть проблемой. Маловероятно, что вы написали бы тяжелую работу с большим количеством сообщений во внутренних циклах, если вы хороший программист на Obj-C, что означает, что вы действительно будете писать эти внутренние циклы на C. Если вы не низкий программист, шансы на то, что тяжелые работы будут выполняться любыми библиотеками, которые вы решили отложить, тоже, и вы будете зависеть от того, что они выбрали.
Переносимость - это реальная проблема, если вы заботитесь об этом. Если нет, то мех. Кроссплатформенность - это еще не конец. Быть успешным с первого раза было бы неплохо :) Вы всегда можете портировать позже. Если вы все равно не планируете кроссплатформенность с первого дня, то просто на одном языке вы не очень далеко уйдете: существует множество реальных различий между платформами, которые требуют адресации.
Завершение проекта важнее, чем беспокойство о технологиях, и если вы более продуктивны в Obj-C, то оставайтесь в Obj-C.
Мои предпочтения? Я парень C ++. Я как Obj-C просто отлично, но я счастлив в C ++, и я делать записи кросс - код платформы.
источник
С 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 ++. Кто-нибудь может уточнить это?
Надеюсь, это поможет,
Lee.
источник
Vector3D
класс в Obj-C? Мои интуитивные ощущения говорят мне, что это может привести к плохой работе.Это зависит от того, что именно вы программируете. Если это в основном игровая логика с использованием существующих физических и графических движков, я могу с уверенностью сказать, что не вижу смысла использовать c или c ++, если вам удобнее использовать obj-c. Если вы собираетесь внедрять классы рендеринга или физики, я бы написал те, которые используют c или c ++. Cocos2d - замечательная и одна из самых популярных библиотек игр для iOS, написана на obj-c.
Прочтите это прочтение - соответствующая часть «Разделение труда» может помочь вам решить, когда писать код на языке более высокого уровня, а когда использовать более низкий уровень: управляемый код в играх
Несмотря на то, что издержки target-c не должны быть рядом с C # и даже не управляются (на iOS), я считаю, что логика все еще применима, и устройства под управлением iOS также не так сильны, как ПК, который будет интерпретировать MSIL :)
источник
В этом исследовании говорится, что для того, чтобы действительно добиться высокой производительности в игре, интенсивно использующей процессор, вы должны использовать C. Связанная статья содержит проект XCode, который вы можете запустить.
Я считаю, что суть заключается в следующем: используйте Objective-C, где вы должны взаимодействовать с функциями iPhone (в конце концов, повсеместное размещение батутов не может быть ни для кого полезным ), но когда дело доходит до циклов, таких вещей, как классы векторных объектов или интенсивные доступ к массиву, придерживайтесь массивов C ++ STL или C, чтобы получить хорошую производительность.
Я имею в виду, было бы совершенно глупо видеть
position = [[Vector3 alloc] init] ;
. Вы просто запрашиваете снижение производительности, если используете счетчик ссылок на базовые объекты, такие как вектор положения.Смотрите также эти сравнения,
источник