C против C ++ (Objective-C против Objective-C ++) для iPhone - PullRequest
15 голосов
/ 14 ноября 2009

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

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

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

Причины: Objective-C - это расширенный набор C, а Objective-C ++ is not - расширенный набор C ++.

Заранее спасибо!

ОБНОВЛЕНИЕ: Как насчет использования памяти, скорости в той же реализации варианта использования?

ОБНОВЛЕНИЕ 1: Если кто-то может предоставить дополнительную информацию, он будет рад.

Ответы [ 8 ]

18 голосов
/ 14 ноября 2009

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

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

16 голосов
/ 15 ноября 2009

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

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

11 голосов
/ 14 ноября 2009

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

7 голосов
/ 14 ноября 2009

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

3 голосов
/ 15 ноября 2009

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

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

3 голосов
/ 15 ноября 2009

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

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

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

Надеюсь, это поможет.Ура, Мэтью

1 голос
/ 27 апреля 2016

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

1 голос
/ 14 ноября 2009

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

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

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

...