C vs C++ (Objective-C vs Objective-C++) для iPhone

Я хотел бы создать портативную библиотеку для iPhone, которая также может использоваться для других платформ.

мой вопрос следующий:

кто-нибудь знает, что лучше всего использовать на iPhone: Objective-C или Objective-C++? Работает ли он с C++ так же, как Objective-C С C или нет?

причины: Objective-C является надмножеством C, но Objective-C++ is not надмножество C++.

спасибо вперед!

обновление: как насчет использования памяти, скорости в той же реализации варианта использования?

обновление 1: если кто-нибудь может предоставить больше информации, он будет счастлив.

8 ответов


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


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

Если вам нужны определенные языковые функции, которые недоступны в C, вы должны сказать нам, что они, чтобы вы могли получить лучший совет =)


Я считаю, что ваша информация неверна. Objective-C++ is надмножество C++. Любой C++ является юридической целью-C++. Кроме того, вы можете смешивать код Objective-C и C++ в Objective-C++ (обычно .mm) файл и (с некоторыми ограничениями) смешивать переменные экземпляра класса Objective-C и C++ в классе Objective-C++. Objective-C++ особенно полезен для взаимодействия между Objective-C и библиотекой c++. Напишите свою кросс-платформенную библиотеку на C++. Затем вы можете вызвать его из Objective-C++ в приложении. Перечитайте цель-C++ раздел руководства по языку Objective-C для получения дополнительной информации.

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


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


правда в том, что вы можете использовать C или C++ в Xcode. Причина использования Objective C для Cocoa и Cocoa Touch (iphone) заключается в простоте использования и том, как он обрабатывает многие проблемы с памятью, с которыми вы столкнетесь самостоятельно. Цель C и Xcode работают как сон. Я бы также рекомендовал проверитьhttp://www.kevincallahan.org/software/accessorizer.html Accessorizer является удивительным и сокращает время разработки в ничто.

сказав, что я не вижу проблем в написание функций / методов на C или C++ и их использование в части вашего проекта XCode. Просто не ожидайте использовать Objective C, чтобы играть так же хорошо на других платформах. Apple и Windows development IDE отличаются, и у Microsoft есть хорошая привычка не делать вещи совместимыми с другими средами (не только Apple.)

Я рад услышать, что кто-то пытается повторно использовать свой код для других проектов :) слишком много людей забывают создавать свои собственные библиотеки в эти дни, и я не имею ни малейшего представления почему.

надеюсь, это поможет. Овации, Мэтью!--3-->


вот ваше предостережение: потратьте сотню на то, чтобы стать разработчиком и запустить Xcode IDE, с которой вы будете работать на Mac - это был бы лучший способ для вас решить, поскольку очевидно, что вы не полностью понимаете, как эта платформа работает вообще.

пожалуйста, не грубите всем, кто пытается вам помочь. Это сообщество построено на уважении. Люди здесь действительно помогают и заботятся, и есть несколько таких мест в сети слева.


перейти на C или c++ - я не вижу причин рекомендовать один над другим, не зная больше о ваших целях.

с точки зрения использования памяти, C++ и C требуют более дисциплинированного кодирования. С точки зрения скорости, C и c++ практически в любом случае будут быстрее любого решения ObjC/ObjC++. Я часто смешиваю свои приложения Objective C с кодом C и C++ и всегда был доволен результатами. Как правильно сказал Джонатан, ObjectiveC++ - это в основном мост для использования C++ код / библиотеки в вашем приложении Objective C / s.

вы можете свободно использовать объекты C++ из Objective C++. Однако вы не можете использовать объекты Objective C / C++ в C++. Так что это дорога в один конец. Чтобы преодолеть любые ограничения, налагаемые этим ограничением, просто оберните объекты C++ объективными классами c++ там, где это необходимо.


"Objective-C является строгим надмножеством C, а Objective-C++ - строгим надмножеством c++."- https://developer.apple.com/library/mac/documentation/DeveloperTools/Conceptual/CppRuntimeEnv/Articles/SymbolVisibility.html