Можно ли запрограммировать iPhone на C ++


124

Я сторонник языкового разнообразия, но цель C - безумие. Так что мне любопытно: можно ли кодировать приложения для iPhone с помощью C ++ при использовании Cocoa API и т. Д.?

Ответы:


57

Короткий ответ, да, вроде того. Вы можете использовать Objective-C ++, о котором вы можете прочитать в Apple Developer Connection.

Если вы уже знаете C ++, изучить Objective-C было бы довольно просто, если бы вы решили попробовать. Более подробная информация по этой теме также есть на ADC.


1
Можете ли вы порекомендовать веб-сайт или книгу, предназначенную для опытных программистов на C ++ для изучения Objective-C? Мне удалось объединить несколько тестовых приложений, но я считаю, что синтаксис немного перевернут, и я уверен, что делаю вещи, которые приводят к утечкам памяти и т. Д. Только из-за незнания Objective-C
Lea Hayes

3
@LeaHayes Бесплатная книга под названием «От C ++ к Objective-C». Предполагается, что вы знаете C ++, а затем расскажете, как в Objective-C все по-другому. pierre.chatelier.fr/programmation/fichiers/cpp-objc-en.pdf (это английский перевод оригинального французского)
olafure

61

Хотя изначально Objective-C действительно кажется «безумным», я призываю вас придерживаться его. Как только у вас наступает момент «а-ха», внезапно все начинает обретать смысл. Мне потребовалось около 2 недель целенаправленной концентрации на Objective-C, чтобы действительно понять фреймворки Cocoa, язык и то, как все это сочетается друг с другом. Но когда я действительно "понял" это, это было очень-очень захватывающе.

Звучит банально, но это правда. Придерживаться его.

Конечно, если вы используете библиотеки C ++ или существующий код C ++, вы можете использовать эти модули с Objective-C / Objective-C ++.


42

Я использую Objective-C, чтобы собрать пользовательский интерфейс.
Но суть кода все еще написана на C ++.

Это основная цель Objective-C - интерфейс пользовательского интерфейса и обработка событий.
И он отлично подходит для этой цели.

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


9
@Spanky: Как я делаю что именно? Вы можете записать обычный C в файл * .m. Вы можете писать обычный C ++ в файлах * .mm (Objective-C ++). Внутри файлов Objective-C (++) вы можете использовать обычные файлы, как файлы #include <XXX>C / C ++.
Мартин Йорк

28

Во-первых, сказать, что Objective-C «безумен» - это юмористично. Рядом со мной лежит книга Бьярна Страуструпа по C ++, которая занимает 1020 страниц. PDF-файл Apple на Objective-C - 141.

Если вы хотите использовать UIKit, вам будет очень и очень сложно что-либо делать на C ++. Любое серьезное приложение для iPhone, которое соответствует пользовательскому интерфейсу Apple, потребует, чтобы его части пользовательского интерфейса были написаны на Objective-C. Только если вы пишете игру OpenGL, вы можете почти полностью придерживаться C / C ++.


30
С каких это пор меньше документации было хорошо? "Язык программирования C ++" очень подробный и документирует STL.
Timmmm

2
@Timmmm: С тех пор, как K&R указали на это в первых страницах своей книги. Objective-C - гораздо меньший язык, чем C ++, со многими из тех же преимуществ (и некоторыми своими собственными). Конечно, все компромиссы. Но минимальная документация делает Obj-C довольно простым для освоения опытными C (или C ++) людьми.
Бен Зотто,

62
Извините, но ObjC безумен. Настаивание на совершенно ином способе объявления функций, использовании скобок. Это не приносит пользы. Они могли бы разработать такой же эффективный язык без нелепого синтаксиса. Они решили не делать этого. Таким образом, это безумие.
Ревень

13
@Rhubarb - Хотя мне нравится Objective-C, я должен согласиться, что его странный синтаксис бесполезен.
Raphael

@Rhubarb, Ага, помните, Apple - это компания, которая придумала это безумие, а Apple отличается от других с единственной целью - отличаться.
SeanRamey

14

Имея некоторый опыт в этом, вы действительно можете использовать код C ++ для своего «основного» кода, но вы должны использовать objective-C для всего, что касается iPhone.

Не пытайтесь заставить Objective-C действовать как C ++. Сначала вам может показаться, что это возможно, но полученный код действительно не будет работать с Какао, и вы очень запутаетесь в том, что происходит. Потратьте время на то, чтобы правильно изучить, без использования C ++, как создавать графические интерфейсы и приложения для iPhone, а затем разместить ссылку в своей базе C ++.


3

Вы должны использовать Objective C для взаимодействия с Cocoa API, поэтому выбора нет. Конечно, вы можете использовать столько C ++, сколько захотите, за кулисами (Objective C ++ упрощает это).

Это действительно безумный язык, но он также ... забавный в использовании, когда вы немного привыкнете к нему. :-)



2

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

До сих пор это было эффективно, и я не встречал никаких ошибок. Это кажется законным подходом, поскольку Xcode позволяет создавать классы C ++, а также классы Obj-C, и некоторые официальные примеры кода делают это таким образом. Для этого мне не пришлось выходить за пределы официально поддерживаемых интерфейсов.

Написание оставшегося кода пользовательского интерфейса на C ++ вряд ли принесет много пользы, даже если бы это было возможно, с учетом помощи, предоставленной вам построителем интерфейса в Xcode, поэтому я отвечу, что вы можете использовать C ++ для почти все ваше приложение или столько, сколько вы сочтете подходящим / удобным.


2

Да, но думать, что вы можете программировать все виды программ на одном языке, - ошибочная идея, если вы не пишете очень простые программы. Objective C предназначен для Cocoa, как C # для .NET, Используйте правильный инструмент для правильной работы, Пытаться заставить C ++ взаимодействовать с Cocoa посредством написания кода моста и попытаться заставить код C ++ вести себя в соответствии с требованиями Cocoa - не лучшая идея, ни ожидание C ++ производительность от Objective C есть. Вам следует попытаться разработать макет и архитектуру приложения с учетом имеющихся навыков и определить, какая часть должна быть написана на каком языке, а затем соответствующим образом построить.


0

В настоящее время я пишу платформу Objective-C ++ под названием Objective-X, которая делает возможным ПРОГРАММИРОВАНИЕ iPHONE PURE C ++. Сделать можно так:

#import "ObjectiveX.h"

void GUIApplicationMain() {    
    GUIAlert Alert;
    GUILabel Label;
    GUIScreen MainScreen;

    Alert.set_text(@"Just a lovely alert box!");
    Alert.set_title(@"Hello!");
    Alert.set_button(@"Okay");
    Alert.show();

    Label.set_text(@"Ciao!");
    Label.set_position(100, 200, 120, 40);

    MainScreen.init();
    MainScreen.addGUIControl(Label.init());    
}

и скомпилируйте его, используя соответствующие параметры командной строки GCC. Я уже скомпилировал это приложение helloworld, и оно похоже на очарование w0rkX0rz. ;-) Скоро он будет доступен в GoogleCode. Найдите Objective-X или посетите http://infotronix.orgfree.com/objectivex ок. неделю спустя!

Обновленный (но явно неактивный) URL: http://code.google.com/p/objectivex/


4
Почему бы не подождать с публикацией, пока она действительно не станет доступна?
Георг Фриче,

8
Обе ссылки сейчас 404
Чжао Сян

1
Согласно SourceForge: «По состоянию на 24 января 2014 года этот проект больше не находится в активной разработке». sourceforge.net/projects/objectivex
JAL,

0

Это может быть немного оффтоп, но все равно. Вы можете программировать на C ++ прямо на устройствах iOS. Ознакомьтесь с приложением CppCode ios - http://cppcode.info . Я считаю, что это поможет позже изучить C, C ++ и Objective-C.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.