Objective-C
Objective-C — это объектно-ориентированный язык программирования, созданный в 1984 году и долгое время широко используемый в разработке приложений для операционных систем iOS и macOS.
Язык создан на основе C и включает в себя дополнительные полезные функции, такие как передача сообщений между объектами и динамическое связывание.
Objective-C был заменен на Swift в качестве основного языка программирования в разработке приложений для iOS и macOS, однако он всё ещё используется в некоторых проектах и является важным для понимания истории развития программирования на платформах Apple.
Ваша приватность умирает красиво, но мы можем спасти её.
24 августа, 2023
XLoader снова в игре: яблочный инфостилер возвращается для проведения новых атак
Обновлённый вредонос использует хитрую уловку для уклонения от обнаружения.
26 апреля, 2023
Северокорейские хакеры BlueNoroff плотно взялись за компьютеры и ноутбуки Apple в своих последних атаках
Свежий вредонос RustBucket ориентирован на пользователей macOS и открывает злоумышленникам любые двери для кражи конфиденциальных данных.
Зачем учить Objective-C в 2022 году: умелое управление памятью и другие операции на низком уровне
Рассказываем, почему стоит выучить Objective-C в 2022 году. Обсудим, какие плюсы приносит знание языка, где и зачем его до сих используют.
Мобильные разработчики в КРОК решают реальные проблемы заказчиков и конечных пользователей: создают приложения для удалённой проверки остроты зрения, интеграции с умными очками для полиции Дубая или доступа к корпоративной социальной сети. В этой статье команда мобильной разработки рассказала, почему Objective-C до сих пор жив и зачем его учить в 2022 году.
Глубокое понимание процессов
Большая часть внутреннего кода macOS, XCode и ядра iOS написаны на C и С++. Objective-C очень хорошо с ними «стыкуется», потому что формально это не язык программирования, а большой препроцессор к чистому Cи.
Поверх Objective-C строится вся экосистема Apple. Тот же Swift во многом написан поверх него, и чтобы понимать, как система работает изнутри и почему Swift выглядит так, как выглядит, и работает так, как работает, «базу» полезно знать.
Например, Objective-C помогает понять, что не все NSProxy это NSObject и в чём разница между Int, NSInteger и NSNumbe. А также за счёт чего работает Swizzling, что такое Selector, как работает responder chain и так далее. В Swift это сильно инкапсулировано и абстрагировано, а потому не очень хорошо видно.
Кроме того, Objective-C, как и любой Cи-язык, помогает разобраться в том, как работают ссылки, указатели и память в принципе. В нём приходится работать со ссылками напрямую, поэтому достаточно написать 1-2 небольших проекта, чтобы понять тему.
Плюсы на собеседовании
На большинстве собеседований вам будут задавать каверзные вопросы об операциях, которые видны при разработке на Objective-C, но редко встречаются в Swift.
Например, атомарность и атрибуты копирования. Долгое время контроль памяти в Objective-C был ручным, и атомарность — то есть доступность переменных одновременно из разных тредов — достаточно больная тема. Поэтому, проработав N времени на Objective-C, ты начинаешь неплохо в этом разбираться: можешь объяснить, какие проблемы возникают в работе с тредами, когда нужно предусмотреть атомарность или подумать о том, как будет копироваться значение, нужен ли дополнительный акцессор.
Objective-C до сих пор используется в разработке
Во-первых, кажется, у любого проекта, который существует больше 2-3 лет, часть кодовой базы написана на Objective-C. Это может быть хоть скрытый слой, который вынесен в зависимость и не особо стыкуется с общей кодовой базой — но он есть и с ним периодически нужно работать: править баги или добавлять фичи.
Во-вторых, пока некоторые приложения не получается переписать на Swift — это требует времени и денег, которые компания или заказчик не готовы тратить. Поэтому база Objective-C разрастается.
В-третьих, если необходима сложная работа с сетью, памятью, ресурсами устройства, то приходится использовать языки с более низким уровнем абстракции, чем у Swift. Это могут быть Objective-C, Objective-C++ или просто C и С++ — в зависимости от того, насколько низкий уровень нам нужен.
Подобное встречается довольно редко, например в работе с мессенджерами (Telegram), потоковым вещанием (Zoom) или видеосервисами (Кинопоиск). В таких случаях тоже можно абстрагироваться и либо вынести часть логики в отдельную зависимость, либо перенести рендеринг или всю логику пакетирования данных на бэкенд. Но не всегда.
Некоторые вещи сложнее делать на Swift, чем на Objective-C
Иногда решать задачи на Swift долго и неудобно — проще воспользоваться костылями, которые давно есть в Objective-C.
В основном речь идёт про управление памятью: протянуть сообщение в несанкционированную память, вручную поманипулировать управлением памятью или тредами. Разберём пару кейсов.
В Objective-C есть чисто «сишные» штуки: memory allocation, управление указателями и ссылками напрямую и так далее. Поэтому там, где нужно очень аккуратно работать с памятью (например, при работе с видео- и аудиопотоками), c помощью Objective-C можно тонко оптимизировать приложение, улучшить производительность и оценки по памяти. В Swift же придётся полагаться на ARC (хотя и тут есть свои лайфхаки).
Кроме того, ARC не решает многих проблем — например, с длительностью жизни объектов. Допустим, у нас есть голосовое сообщение на 14 минут. Пользователь уже прослушал 12 — и они «съели» всю оперативную память. На Objective-C мы легко можем их почистить — на уровне указателей и байтов — оставив только текущую минуту и две последних. А на Swift это потребует высокого уровня абстракции и большого количества кода (либо использования трюков Objective-C через Swift-интерфейс).
Наконец, зачастую нагруженные, сложные и высоко оптимизированные библиотеки, реализующие распознавание видео или фото, компьютерное зрение или криптографические вычисления, написаны на С++. И интегрироваться с ними через Swift больно, долго и дорого. Как правило, легче создать заголовочный файл в Objective-C, написать пару методов для красивой обёртки и обратиться уже к ним. Такие кейсы очень часто встречаются при интеграции с третьими библиотеками.
Что в итоге?
Да, Objective-C не идеален, но его полезно выучить.
Это по-прежнему востребованный язык программирования. Он помогает лучше понять, как устроен Swift и экосистема Apple в целом, позволяет гранулярно работать с низкоуровневыми задачами. Кроме того, на Objective-C всё ещё написана больша́я часть кодовой базы, которую нужно поддерживать. И наконец, знание языка — это бонус на собеседованиях.
Objective-C: история создания, возможности и особенности

Сегодня речь пойдет об одном из самых легендарных языков программирования – Objective-C. Это довольно сложный язык, с высоким порогом входа, на котором написано огромное количество приложений для macOS, iPad и iPhone.
Детям из Мариуполя нужно 120 ноутбуков для обучения — подари старое «железо», пусть оно работает на будущее Украины

iPhone тоже работает на Objective-C
Отличительная особенность этого языка состоит в том, что оно является расширением для другого языка программирования – С. Несмотря на то, что в последнее время Objective-C существенно уступает более прогрессивному, простому и удобному SWIFT, разработка Apple все еще остается актуальной и вызывает интерес.
История появления Objective-C
Все началось в начале 70-х годов прошлого века. На заре программирования использовалась структурная парадигма написания кода. Такая архитектура подразумевала, что все программы строились на трех конструкциях: последовательность, ветвление и цикл (плюс подпрограммы). Подобная методология имела существенный недостаток, который становился все более очевидным по мере усложнения программ – код получался все более запутанным. Возникла необходимость в появлении какой-то технологии, которая бы позволила более рационально использовать код.

Книга о Smalltalk-80
Таким решением стал один из первых объектно-ориентированных языков с динамической типизацией – Smalltalk. Забавно, что, хотя он разрабатывался в семидесятых, его более или менее сформировавшаяся версия называлась Smalltalk-80 (наверное, его разработчики из научно-исследовательского центра Xerox PARC давали имя с прицелом на будущее). Уже в то время Smalltalk мог похвастаться возможностями, которые остаются актуальными и по сей день – у него был сборщик мусора, динамическая типизация. Программы, написанные на Smalltalk компилировались в байткод и выполнялись виртуальной машиной, что позволяло запускать код на любом оборудовании.

Взяв за основу главные принципы языка Smalltalk, был создан Objective-C. Создателем Objective-C считается Брэд Кокс, который старался в начале восьмидесятых сделать такой язык программирования, в котором была бы решена проблема повторяемости кода. Objective-C строился на базовых допущениях: класс – самостоятельный полноценный объект, передача сообщений между классами, динамическое типизирование. Самое главное, что отличало этот язык — гибкость. Программист мог писать код на С, а затем просто вставлять его в Objective-C и программа работала.
В 1985 году Стивом Джобсом, после его увольнения из Apple, была организована компания NeXT, в которую ушли работать несколько разработчиков из Apple. Стив Джобс выбрал для разработки будущих проектов Objective-C, который уже развивался несколько лет и был довольно перспективным проектом, да еще и кросс-совместим с языком С. Objective-C стал базовым языком программирования для операционной системы NeXTEP OS.
Курс Финансовый директор.
Отримайте комплексне розуміння фінансової діяльності. Час підніматись по карʼєрним сходам.

Интерфейс NeXTEP OS
В 1988 программисты NeXT разработали для Objective-C компилятор и SDK. А в 1992 году доработкой Objective-C и компилятора занялись также и участники проекта GNU, так GCC получил совместимость с Objective-C. С покупкой NeXT, Apple приобрела и этот SDK (включая компилятор, библиотеки и среду разработки). IDE получило название Xcode, а GUI – Interface Builder. Фреймворк Cocoa (API для macOS) сейчас является наиболее популярной средой разработки программ на Objective-C.

Современная ОС от Apple
В феврале 2008 Apple представил iPhone SDK 2.0, который позволял разрабатывать программы под платформу iOS. Это поспособствовало популяризации языка программирования Objective-C и дало возможность компании Стива Джобса быстро заполнить AppStore огромным числом приложений.
Синтаксис
С Objective-C можно работать практически на любом дистрибутиве GNU/Linux через компилятор gobjc, включенный в набор компиляторов GNU Compiler Collection.
Разработка в Objective-C под ОС Windows возможна через бесплатные эмуляторы среды POSIX:
- mingw;
- cygwin;
- сервисы Microsoft Windows для UNIX.
Когда программист С смотрит на код Objective-C он видит знакомый синтаксис с некоторыми дополнениями — квадратными скобками, значком “ @ “, код, начинающийся с NS (наследие NeXTSTEP) и др
Самое простое приложение, которое выводит на экран текстовое сообщение, выглядит в Objective-C так:
Курс Комерційний директор.
Зосередження на практичних завданнях та послідовному аналізі проектів замість великої теорії. Реалізуй свої мрії про керівну посаду після завершення курсу.
int main(int argc, const char * argv[]) < @autoreleasepool < NSLog(@""Highload.today""); >return 0; >
Когда нужно упаковать в объекте Objective-C целое, вещественное или логическое значение, используется класс NSNumber.
NSNumber *someNumber = [NSNumber numberWithInt:1];
с литеральным синтаксисом:
На каком языке пишут приложения для iOS
Хотите создавать революционные приложения, но не знаете, на каком языке? Мы подготовили статью, чтобы вы могли определиться (спойлер: Swift).



Евгений Кучерявый
Пишет о программировании, в свободное время создаёт игры. Мечтает открыть свою студию и выпускать ламповые RPG.
Разработка приложений под iOS может быть кросс-платформенной или нативной. Первый способ позволяет использовать код на Java, C++, Python и других языках — просто компилируете приложение под iOS, и оно будет работать.
Второй — писать на Objective-C или Swift — языках, которые лучше всего подходят для создания приложения под операционные системы Apple.
Разработка кросс-платформенных приложений
Как уже говорилось выше, создать приложение для iOS можно с помощью:
Вы пишете один код, а потом компилируете его для разных платформ. Такой способ быстрее и дешевле, но подобные приложения работают гораздо хуже, чем нативные. Это связано с тем, что реализовать многие возможности в них не получится без костылей.
Можно, конечно, оптимизировать код, но работать приложение все равно будет медленнее нативного. Чем больше функций должно быть в приложении, тем хуже оно будет функционировать, не говоря уже о бесконечных багах и уязвимостях.
Разрабатывать кросс-платформенно рекомендуется, если не хватает времени или бюджета. Также такой подход предпочтительнее, когда речь идет о корпоративных приложениях в больших компаниях, где сотрудники пользуются миллионом разных устройств.
Примеры кросс-платформенных приложений:
- Facebook*;
- Instagram*;
- Todo;
- SpinPaint.
Нативная разработка для iOS
Нативные приложения отлично работают без всяких костылей, потому что используются языки, которые подходят для конкретной платформы. В случае с iOS — Objective-C и Swift.
Objective-C
В 1980 году Брэд Кокс в своей компании Stepstone создал Objective-C — позже он стал основным языком разработки для устройств Apple. Objective-C — это компилируемый объектно-ориентированный язык программирования (ООП), основанный на C.
С помощью объектов решается проблема повторяемости кода. Но делается это не так топорно, как при структурном программировании, в котором увеличение объема и сложности программы снижает качество.
Основное отличие Objective-C от C++ (тоже поддерживает ООП и тоже был разработан в восьмидесятых годах) в том, что вызов метода в нем интерпретируется не как функция, а как сообщение — как в языке Smalltalk. Такие сообщения могут содержать что угодно, а отправить их можно куда потребуется.
Также объект может переслать часть полученного сообщения другому объекту (даже если он находится не на этом компьютере), что позволяет делегировать задачи — по такому же принципу работают нейросети.
Objective-C — компилируемый язык. Однако сообщения привязываются к функциям исключительно во время выполнения программы, что позволяет создавать динамичные приложения. Еще в языке поддерживаются протоколы и метаинформация.
Синтаксис здесь значительно отличается от синтаксиса C-подобных языков. Для сравнения:
вызов метода объекта в C#:
Обратите внимание, что инициализатора нет, так же как и методов для получения или присваивания значения переменным. Чтобы создать объект класса Rect, достаточно написать такой код:

Какой язык программирования учить, чтобы создавать приложения для iOS
Какой язык учить первым, зависит от того, что вы собираетесь делать. Например, если хотите устроиться в какую-нибудь компанию и поддерживать уже готовое приложение, то лучше начать с Objective-C, а потом приступить к изучению Swift. Неплохо знать и кросс-платформенные языки, но тоже исключительно для того, чтобы вы могли пофиксить баг или добавить новые функции.
Если же вы хотите работать над новыми проектами, то лучше сразу начинать со Swift. По данным с сайта Apple, приложения на Swift работают до 8,4 раз быстрее, чем на Python 2.7, и до 2,6 раз быстрее, чем на Objective-C.
Важный критерий — поддержка и постоянное обновление языка. В сентябре 2018 года (вместе с выходом iOS 12) вышла версия Swift 4.2, в которую добавили многое, чего не хватало раньше:
- параллельная обработка данных (async/await);
- поддержка регулярных выражений;
- стабильная работа ABI со стандартными библиотеками.
IT — сфера, в которой нужно постоянно развиваться, изучать новые технологии и пробовать писать на разных языках. Недостаточно один раз прочесть книгу и всю жизнь пользоваться советами из нее.
Читайте также:
- Кто такой мобильный разработчик и как им стать
- In Kotlin we trust: как устроено комьюнити перспективного языка программирования
- Все любят язык Go: почему он стал популярным и сколько зарабатывают разработчики