Язык Objective-C ++: где я могу найти больше информации об этом? - PullRequest
5 голосов
/ 22 января 2010

Я изучаю C ++ уже несколько месяцев и считаю его отличным языком, хотя и с преимуществами.

Мне было интересно, что именно является так называемым Objective-C ++ и стоит ли изучать его как основной язык разработки для целевых сред Apple (т. Е. Mac OS X, iPhone OS). В Интернете я нашел только пару хороших статей: в основном Википедия и одну из Mac Dev Center .

Википедия говорит:

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

Статья в Mac Dev Center добавляет:

Компилятор Apple Objective-C позволяет свободно смешивать код C ++ и Objective-C в одном и том же исходном файле. Этот гибрид языка Objective-C / C ++ называется Objective-C ++. С его помощью вы можете использовать существующие библиотеки C ++ из ваших приложений Objective-C.

Статья Apple называет Objective-C ++ языком. Это правильно?

Хотелось бы знать следующее:

  • Можно ли изучать и использовать Objective-C ++, не зная C / Objective-C?
  • Есть ли хорошие книги, сайты, форумы и т. Д., Где можно получить больше информации и / или помощи?
  • Есть ли какие-нибудь крупные проекты, выполненные в Objective-C ++, насколько вам известно?

Ответы [ 5 ]

8 голосов
/ 22 января 2010

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

Я в основном использую ObjC ++ (исходные файлы .mm), когда мне нужно связать код Objective-C с некоторой библиотекой C ++. В этом случае удобно иметь возможность вызывать C ++. Лично я не знаю многих людей, которые действительно смешивают C ++ и Objective-C.

5 голосов
/ 06 февраля 2010

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

Это действительно ничто иное, как Objective-C и C ++, объединенные в одном файле.

Для Objective-C используйте любой из популярных блогов по разработке яблок / списков рассылки / групп новостей. Особенно тот, который предоставлен Apple напрямую.

Для C ++ это то же самое, здесь есть десятки блогов / списков рассылки / стартовых руководств. Но хотя C и его дополнение к Objective-C довольно просты и легки в освоении, если вы уже разбираетесь в программировании. C ++ - совершенно другой и сложный зверь. Получите несколько хороших книг и выучите их (через 10 лет вы сможете полностью понять язык :-), но вы можете писать программы на C ++ только с небольшой долей этого знания.

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

Но особенно для Контейнеров вы должны подумать об использовании шаблонов C ++. Вектор намного быстрее, чем NSArray. Если ваш набор данных большой, вы почувствуете разницу. Также я считаю, что контейнеры C ++ проще в использовании, потому что они избегают типов, которые вы должны делать с Objective-C.

С медленными процессорами ARM на iPad и iPhone это не преждевременная оптимизация.

К сожалению, вы не можете смешивать классы C ++ и Cocoa, и поэтому C ++ следует использовать только для алгоритмических данных. Для GUI вы должны использовать классы Какао и Objective-C.

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

1 голос
/ 22 января 2010

1) Я сомневаюсь в этом, потому что каждый из них является надмножеством языка Си. я не считаю цель-с ++ совершенно новым языком. это просто сочетание того и другого, что дает вам некоторые дополнительные возможности - то есть повторно использовать существующий код c ++, или использовать более быстрый c ++ в более критичных по времени разделах кода, или использовать код c ++, где не представлен интерфейс target-c / cocoa (главным образом, связанный с аппаратным обеспечением низкого уровня) такие вещи, как последовательные порты / ioctls, opengl, ...)

2) я думаю, что ресурсы по этой теме

3) пройти ... я имею в виду то, что вы считаете большим. я просто знаю из множества проектов (может быть, не все они коммерческие в том смысле, что вы можете купить программное обеспечение в магазине), которые используют этот микс по причинам, перечисленным в 1.

0 голосов
/ 04 мая 2017

Objective-C ++

Objective-C - это небольшой набор расширений для ANSI C. Objective-C++ - это тот же набор расширений, который применяется к C ++. Компилятор Apple Objective-C также является компилятором Objective-C ++.

Одним из преимуществ Objective-C является то, что как супер-набор ANSI C он может быть легко смешан с миллионами строк существующего кода C в мире. Objective-C ++ может смешиваться с миллионами строк кода C ++, которые уже существуют. Функции C ++, такие как искажение имен, полностью поддерживаются Objective-C ++, так что прямая связь между кодом Objective-C ++ и существующим Возможен код C ++.

Файлы исходного кода Objective C идентифицируются расширением .m. Компилятор Apple рассматривает файлы с расширениями .M или .mm как исходный код Objective-C ++. Кроме того, параметр компилятора –x может использоваться для указания компилятору Apple обрабатывать любой входной файл как исходный код Objective-C ++.

Электронная документация Apple описывает функции и ограничения Objective-C ++ на http://developer.apple.com/techpubs/, и в примечаниях к выпуску, которые поставляются с инструментами разработчика Apple. В общем, классы Objective-C и классы C ++ могут быть смешаны, так что метод Objective-C может вызывать функцию-член C ++ и наоборот, или класс C ++ может включать указатель на объект Objective-C в качестве переменной-члена. Классы Objective-C не могут наследоваться от классов C ++ или наоборот. Две иерархии классов должны оставаться разными. Семантика, касающаяся создания и удаления экземпляров, существенно отличается в C ++ и Objective-C. В результате их смешивание может быть сложным, но выгода от повторного использования существующего кода C ++ в новых проектах Objective-C перевешивает сложности, которые он представляет.

Еще несколько практических моментов о Objective-C ++

Gcc одновременно является компилятором для C, Objective-C и C ++. Вы можете смешивать код C ++ и Objective-C в некоторой степени. Чтобы указать компилятору, что файл содержит код C ++, а также Objective-C, используйте расширение файла .mm или .M вместо .m.

Ниже приведены некоторые способы совместного использования кода C ++ и Objective-C:

  1. Объекты Objective C могут иметь поля, которые указывают на объекты C ++, и наоборот.

  2. Код Objective C может вызывать методы для объектов C ++ и наоборот.

  3. Объекты Objective C могут иметь объекты C ++ (в отличие от указателей) в качестве полей, но только если в классе C ++ нет виртуальных методов.

Однако Objective-C и C ++ не полностью совместимы. Вот некоторые вещи, которые вы не можете сделать:

  1. Классы Objective C не могут наследоваться от классов C ++ и наоборот.

  2. Вы не можете объявлять классы Objective-C в пространствах имен или шаблонах C ++ или наоборот.

  3. Вы не можете использовать C++ ключевые слова для Objective-C имен переменных.

  4. Вы не можете вызывать Objective-C методы с синтаксисом C++ или наоборот.

Наконец, существуют некоторые ограничения, которые налагаются во избежание двусмысленности:

  1. Вы не можете использовать идентификатор имени в качестве имени шаблона C ++. Если бы вы могли, объявление id var могло бы быть либо объявлением шаблона C ++, либо объявлением Objective C с использованием протокола.

  2. Если вы передаете глобальную переменную C ++ в метод Objective-C, вам нужно пробел между первым и вторым двоеточиями.

Вам может пригодиться эта ссылка: -

  1. https://www.raywenderlich.com/62989/introduction-c-ios-developers-part-1

  2. https://www.raywenderlich.com/62990/introduction-c-ios-developers-part-2

  3. https://www.sitepoint.com/using-c-and-c-in-an-ios-app-with-objective-c/

  4. https://github.com/sitepoint-editors/HelloCpp

0 голосов
/ 22 января 2010

Множество крупных проектов используют Objective-C ++. Например, Camino, Chromium и Firefox - это важные проекты с открытым исходным кодом, включающие Objective-C ++.

...