Почему и когда я должен использовать код C / C в приложении iOS?

#iphone #c #objective-c #c #ios

#iPhone #c #objective-c #c #iOS

Вопрос:

Когда и особенно почему я должен переключаться с Objective-C на C или C при разработке на платформе iOS. Я уверен, что я что-то упускаю, но, насколько я вижу, Apple хочет, чтобы разработчики использовали Objective-C везде в среде Mac / iOS, так зачем мне использовать C / C ?

Одно замечание, однако, я НЕ говорю о РАЗРАБОТКЕ ИГР. В случае игр я понимаю, в чем преимущества. Я просто не понимаю, когда я хочу использовать C, если я разрабатываю, например, клиент для сервера или что-то в этом роде (опять же, не игру). Все классы, которые мне нужны, уже есть, и все они в Objective-C.

Комментарии:

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

2. @GeneBushuyev согласился с тем, что objective-C изначально не был хорошо спроектированным языком, но и C тоже. (Кажется, я помню, что objective C предшествует C , но в начале 80-х они были в пределах года или двух друг от друга). С тех пор оба языка сильно выросли и пошли в разных направлениях. Сейчас они оба являются вполне приличными языками, но предназначены для разных целей … советовать не использовать его, если у вас нет другого выбора, кажется мне немного экстремальным.

3. Спасибо всем за комментарии и ответы. Я думал, что не знаю какой-то «очень важной супер-причины» для использования того или иного. Теперь все это имеет больше смысла и более понятно для меня.

4. Теперь я просто не знаю, какой ответ выбрать как правильный: D

5. На вашем месте я бы выбрал ответ hotpaw2. Это самый тщательный.

Ответ №1:

Objective C является строгим надмножеством ANSI C, поэтому программист Objective C, скорее всего, уже выполняет значительный объем программирования на C. На самом деле, многие API для Mac и iOS (аудио, графика и т.д.) являются интерфейсами C и / или используют типы данных C.

Несколько причин, по которым нужно что-то делать на C, из вещей, которые возможны как на языках надмножества, так и на языках подмножеств, могут включать производительность и переносимость. Для обмена сообщениями Objective C требуется небольшая нагрузка во время выполнения, которая совершенно непригодна для внутренних циклов обработки аудио- или видеоизображений в реальном времени и т. Д. Для переносимости часто можно использовать хорошо инкапсулированный код C в iOS, Linux, Android NDK, WebOS PDK и т. Д. И иногда оболочки Objective C для службы ОС не обеспечивают всей гибкости некоторых базовых API C.

Единственная причина, по которой я вижу использование C для приложения iOS, может заключаться в использовании некоторого устаревшего кода на C и сохранении некоторой согласованности стиля с этим кодом для удобства чтения, удобства обслуживания и т. Д.

Для приложения для iOS, где производительность или любое повторное использование переносимого кода не важны, есть несколько причин не использовать просто Objective C (с включенным в него языком C), поскольку именно на нем поддерживается самая актуальная документация, инструменты, фреймворки и API для iOS.

Ответ №2:

Главное преимущество — мобильность. Фрагмент кода, написанный на C или C, при принятии соответствующих мер может быть очень легко упакован и использован в iOS или Android, Blackberry и т. Д… По этой причине многие сторонние библиотеки идут по этому пути (сразу приходят на ум Zebra Crossing и OpenCV).

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

Ответ №3:

Единственные причины, о которых я могу думать, это (а) у вас есть существующая кодовая база C , которую вы хотите использовать повторно (и не хотите переписывать все это в Objective C), или (б) вам действительно нравится C и / или действительно не нравится Objective C.

Ответ №4:

Почему бы не смешивать и сочетать, как вам нравится. Компилятор поддерживает «objective c «. Не уверен, что он поддерживает функции C 11 в таком режиме, но он должен хорошо поддерживать C 98. Я думаю, все, что требуется, это изменить имена ваших исходных файлов с «.m» на «.mm». (Все это из памяти и может быть неточным).

Что касается «почему». Некоторые API Apple имели больше функций на одном языке, чем на другом. Например, раньше (и все еще может быть), что куча функций графики / quicktime была доступна только через интерфейсы cocoa, а не через интерфейсы objective C.

Еще более вероятно, что некоторые сторонние библиотеки могут быть доступны только на одном языке.