← Назад к вопросам

Как относишься к Objective-C?

1.0 Junior🔥 41 комментариев
#Soft Skills и карьера

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI5 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Мой взгляд на Objective-C в современной iOS-разработке

Как iOS-разработчик с более чем 10-летним опытом, я отношусь к Objective-C с глубоким уважением и практической оценкой его роли в эволюции экосистемы Apple. Это не просто "старый язык", а фундаментальная технология, которая сформировала современную iOS - и понимание её критически важно даже сегодня, когда Swift стал доминирующим языком.

Историческое значение и архитектурные принципы

Objective-C — это объектно- ориентированное расширение C, построенное вокруг динамической системы сообщений (message passing) вместо вызова методов. Эта модель породила ключевые паттерны iOS:

  • Делегирование (Delegation): protocol в Swift — прямые потомки Objective-C протоколов.
  • Селекторы (Selectors): #selector в Swift унаследован напрямую.
  • Категории (Categories): стали расширениями (extensions) в Swift.
  • Динамическая диспетчеризация: основа Key-Value Observing (KVO) и многих механизмов UIKit.

Вот классический пример Objective-C кода, который любой iOS-разработчик должен уметь прочитать:

// MyViewController.h (интерфейс)
@interface MyViewController : UIViewController <UITableViewDelegate>
@property (nonatomic, strong) NSArray<NSString *> *items;
@end

// MyViewController.m (реализация)
@implementation MyViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    self.items = @[@"First", @"Second", @"Third"];
}

#pragma mark - UITableViewDelegate

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    NSString *selectedItem = self.items[indexPath.row];
    NSLog(@"Selected: %@", selectedItem);
    [tableView deselectRowAtIndexPath:indexPath animated:YES];
}

@end

Практическое отношение в 2024 году

  1. Для поддержки legacy-кода: Огромное количество корпоративных приложений, банковских систем, медиа-сервисов содержат милионы строк Objective-C. Полный рефакторинг под Swift экономически нецелесообразен. Поэтому умение поддерживать, дорабатывать и интегрировать Objective-C код — ценный навык.

  2. Для понимания фундамента: Swift скрывает многие низкоуровневые детали. Objective-C обнажает:

    *   Управление памятью (**MRC**, затем **ARC**)
    *   Структуру **Objective-C Runtime**
    *   Взаимодействие с **C** и **C++** (через **Objective-C++**)

  1. Мост между языками (Interoperability): Swift и Objective-C прекрасно сосуществуют благодаря bridging headers. Понимание обеих сторон моста позволяет эффективно мигрировать код и использовать старые, но проверенные библиотеки.
// Использование Objective-C класса в Swift (через bridging header)
let oldProcessor = LegacyDataProcessor()
oldProcessor.processData(withCompletion: { success in
    print("Done")
})

Когда Objective-C всё ещё актуален?

  • Работа с системными фреймворками: Многие API CoreFoundation, CoreGraphics, Darwin возвращают CFTypeRef или требуют понимания Unmanaged ссылок.
  • Отладка низкоуровневых проблем: Крэши в стектрейсе часто содержат Objective-C имена методов. Понимание objc_msgSend помогает в диагностике.
  • Оптимизация критичного кода: В редких случаях, прямой вызов C-функций через Objective-C обёртку может дать выигрыш в производительности.

Выводы

Моё отношение к Objective-C можно суммировать так:

  • Не как к основному инструменту для новых проектов — Swift безопаснее, выразительнее и продуктивнее.
  • Как к обязательному языку для изучения каждым профессиональным iOS-разработчиком — это как знать историю своей профессии.
  • Как к ценному навыку для enterprise-разработки — где долгоживущие проекты требуют работы с гибридной кодобазой.
  • Как к мосту к пониманию iOS-экосистемы — многие "магические" возможности Swift имеют корни в Objective-C Runtime.

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