Чи можливо програмувати iPhone на C ++


124

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

Відповіді:


57

Коротка відповідь, так, начебто. Ви можете використовувати Objective-C ++, про який ви можете прочитати на підключенні для розробників Apple.

Якщо ви вже знаєте C ++, вивчити Objective-C було б досить просто, якби ви вирішили спробувати. Більше інформації на цю тему також є в АЦП.


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

3
@LeaHayes Безкоштовна книга під назвою "Від C ++ до Objective-C". Припустимо, що ви знаєте C ++, а потім розповість, як все робиться по-різному в Objective-C. pierre.chachatelier.fr/programmation/fichiers/cpp-objc-en.pdf (це англійський переклад оригінальної французької мови)
olafure

61

Хоча «Objective-C» справді здається «божевільним» спочатку, я закликаю вас дотримуватися цього. Як тільки у вас є "а-ха" момент, раптом все починає мати сенс. Для мене знадобилося близько 2 тижнів зосередженої концентрації Objective-C, щоб дійсно зрозуміти рамки какао, мову та те, як все це поєднується. Але одного разу я справді "отримав" це, це було дуже дуже хвилююче.

Це звучить кліше, але це правда. Приклейте його.

Звичайно, якщо ви вводите бібліотеки 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 є "божевільним" - це жартівливий - у мене поруч сидить книга Bjarne Stroustrup 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 ++), щоб досягти швидкості.
Ben Zotto

62
Вибачте, але ObjC божевільний. Наполегливість до зовсім іншого способу декларування функцій, використання дужок. Це відрізняється без користі. Вони могли скласти ту саму ефективну мову без смішного синтаксису. Вони вирішили не робити. Таким чином, це божевільно.
Ревінь

13
@Rhubarb - Хоча мені подобається Objective-C, я маю згоду, що дивний синтаксис не виконує ніяких цілей.
Рафаель

@Rhubarb, Yup, пам’ятай, Apple - компанія, яка придумала це божевілля, і Apple відрізняється єдиною метою бути різною.
SeanRamey

14

Маючи певний досвід цього, ви дійсно можете використовувати код C ++ для свого "основного" коду, але ви повинні використовувати target-C для будь-якого конкретного iPhone.

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


3

Ви повинні використовувати Objective C для взаємодії з API какао, тому вибору немає. Звичайно, ви можете використовувати стільки C ++, скільки вам подобається за лаштунками (ціль C ++ робить це легко).

Це справді божевільна мова, але це також ... якось весело користуватися, коли ви трохи звикли до неї. :-)



2

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

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

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


2

Так, але думка про те, що ви можете запрограмувати будь-яку програму на одній мові, є хибною ідеєю, якщо ви не пишете дуже простих програм. Мета C - для какао, як C # - це для .NET, використовуйте правильний інструмент для правильної роботи, намагаючись змусити C ++ взаємодіяти з какао через написання мостового коду та намагання змусити код C ++ поводитись відповідно до вимог какао - це не дуже гарна ідея, і не очікуйте, що C ++ продуктивність від Цілі C є. Спробуйте сформувати дизайн та архітектуру зберігання додатків з урахуванням існуючих навичок та визначити, яку частину слід написати на якій мові, а потім скласти відповідно.


0

Я зараз пишу рамку Objective-C ++ під назвою Objective-X, яка робить можливим PURE C ++ iPHONE PROGRAMMING. Ви можете зробити так:

#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.01.2014, цей проект вже не знаходиться в активному розвитку". sourceforge.net/projects/objectivex
JAL

0

Це може бути трохи офтопіком, але все одно. Ви можете програмувати c ++ прямо на пристроях iOS. Ознайомтеся з додатком CppCode ios - http://cppcode.info . Я вважаю, що це допомагає пізніше вивчити c і c ++ та target-c.

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