Objective-C ++ для разработки под iOS

Можно ли использовать Objective-C ++ для разработки приложений под iOS (iPhone, iPad, iPod touch)?

Есть ли в Интернете примеры и исходный код?


person nik    schedule 23.02.2011    source источник
comment
Мне интересно, что вас привлекает в C ++? В некоторых играх для iOS используется немного C ++, но на iPhone это практически не затронуто, поскольку Cocoa-Touch делает большинство преимуществ C ++ избыточными. Я нашел это: stackoverflow.com/questions/3804219/ Отмеченный ответ очень полезен.   -  person Aurum Aquila    schedule 23.02.2011


Ответы (2)


Использовать ObjC ++ довольно просто. Вы должны объявить исходные файлы с расширением .mm. Это заставит компилятор рассматривать их как ObjC ++. То же самое с заголовками: используйте расширение .hh.

Есть еще один вариант: перейти к целевым настройкам и установить Compile Sources As на Objective-C ++.

Это все. Никаких дополнительных работ не требуется.

Некоторые примечания: если вы хотите разработать собственное приложение для iOS, используйте Objective C. Это сэкономит много времени. Но в некоторых случаях более уместно использование C ++. Например. для кроссплатформенной разработки. Таким образом, вы используете только немного Objective C для iPhone или Java для Android, просто чтобы связать свой код с окружающей средой. Все остальное на C ++. Я использую это для разработки кроссплатформенных игр.

Другой случай - производительность: Objective C принципиально медленнее, чем C ++. Однако это заметно только во время вызовов методов (в ObjC это называется обменом сообщениями).

person Max    schedule 23.02.2011
comment
Для кросс-платформенных целей он имеет тенденцию разбивать то, что у вас есть класс представления исключительно в Objective-C, контроллер полностью в Objective-C, но скомпилирован как Objective-C ++, чтобы он мог вызывать модель, написанную полностью на C ++. Вы можете улучшить все вызовы динамической диспетчеризации Objective-C, подключившись прямо к среде выполнения, поскольку вы можете получить текущий указатель функции C для любого метода, но это некрасиво и не соответствует объектно-ориентированной модели должным образом. - person Tommy; 23.02.2011
comment
@Tommy, ты абсолютно прав. Но я сказал, что использую только минимальное количество Objective C, чтобы иметь возможность связываться с системой (например, события касания или CAEAGLLayer для связывания OpenGL). Но я не использую Objective C в классах C ++. Просто C ++ в Objective C, чтобы иметь минимальный интерфейс с системой. - person Max; 23.02.2011
comment
Таким образом, весь движок написан на C ++, но у него есть классы, специфичные для платформы. - person Max; 23.02.2011
comment
Я думаю, что это, наверное, умно; Я полагаю, что чем больше нативного графического интерфейса вы хотите, тем больше вас выталкивают на территорию родного языка, поэтому игры, как правило, остаются мелкими. Я был в Nokia несколько недель назад (то есть незадолго до объявления Nokia-Microsoft, которое фактически ставит C / C ++ вне закона для будущих телефонов Nokia), и они решительно отстаивали именно то, что вы предлагаете. - person Tommy; 23.02.2011
comment
Да, это действительно только для игр. Не вижу смысла использовать C ++ на iPhone или Android, если вы не разрабатываете игру. - person Max; 23.02.2011
comment
Сосредоточение внимания на замедлении обмена сообщениями в Objective-C может быть несколько преждевременной оптимизацией: mikeash.com/pyblog/. На оригинальном iPhone сообщения работают примерно так же медленно, как деление с плавающей запятой, поэтому они ни в коем случае не являются узким местом в подавляющем большинстве случаев. - person Brad Larson; 24.02.2011
comment
@ Брэд Ларсон: ну, он медленнее более чем в 2 раза, чем вызов виртуального метода C ++ (и я полагаю, намного медленнее, чем не виртуальный вызов) ... Хотя я не сказал, что это настоящая горлышко бутылки, это просто медленнее . Выбор языка больше похож на вопрос архитектуры приложения. Кстати спасибо за ссылку, действительно интересно =) - person Max; 24.02.2011
comment
@Max - Если вы хотите более качественное чтение, посмотрите Серия из четырех частей Билла Бумгарнера о том, как работает отправка сообщений Objective-C (включая вручную настроенную сборку, стоящую за этим). - person Brad Larson; 24.02.2011
comment
@ Брэд Ларсон, спасибо, я уже это видел. А также исходный код реализации ObjC отсюда opensource.apple.com/source/objc4/objc4 -437,1 :) - person Max; 24.02.2011

Да, ты можешь. Ознакомьтесь с образцами и новыми шаблонами файлов, которые предоставляет Apple.

person Nick Toumpelis    schedule 23.02.2011
comment
Я хотел бы знать, где находятся эти шаблоны. :-) - person NoEvilPeople; 26.05.2011
comment
@NoEvilPeople Для записи вот один ›:) developer.apple.com/library/ios/samplecode/aurioTouch/History/ - person bodacious; 15.04.2014