Definicja #
Objective-C to język programowania będący nadzbiorem języka C, rozszerzonym o mechanizmy obiektowe zaczerpnięte z języka Smalltalk. Powstał w latach 80. (Brad Cox, Tom Love) i od lat 90. stał się głównym językiem tworzenia oprogramowania dla platform Apple — NeXTSTEP, macOS i iOS.
Charakterystyczne cechy Objective-C:
- Wysyłanie komunikatów (message passing) — wywołanie metody to wysłanie komunikatu do obiektu:
[obiekt metoda:argument]; semantycznie inne niż typowe wywołanie funkcji - Dynamiczny dispatch — decyzja o wywoływanej metodzie jest podejmowana w runtime (nie w czasie kompilacji); elastyczne, ale trudniejsze do optymalizacji przez kompilator
- Nadzbiór C — każdy kod C jest poprawnym kodem Objective-C; bezpośredni dostęp do bibliotek C i C++
- Kategorie — rozszerzanie istniejących klas bez dziedziczenia; pozwala dodawać metody do klas systemowych (np.
NSString) - Protocols — odpowiednik interfejsów; stosowane szeroko w Cocoa Touch (np.
UITableViewDelegate) - ARC (Automatic Reference Counting) — automatyczne zarządzanie pamięcią przez zliczanie referencji; wcześniej ręczne retain/release
- Cocoa / Cocoa Touch — frameworki Apple zbudowane w Objective-C:
UIKit,Foundation,AppKit; nadal obecne pod spodem nawet w projektach Swift
Objective-C jest wypierany przez Swift (2014) — nowoczesny, bezpieczniejszy i bardziej zwięzły język Apple. Jednak wiele aplikacji enterprise, bibliotek third-party i frameworków systemowych wciąż zawiera kod Objective-C. Interoperacyjność Swift-Objective-C pozwala mieszać oba języki w jednym projekcie.
Zastosowania #
- Utrzymanie istniejących aplikacji iOS/macOS napisanych w Objective-C — duże korporacje posiadają kod legacy wymagający wsparcia
- Integracja Swift z bibliotekami Objective-C — przez bridging header oba języki mogą współistnieć w jednym projekcie Xcode
- Praca z bibliotekami third-party napisanymi w Objective-C — część starszych SDK (np. niektóre SDK reklamowe) dostarcza tylko interfejs Objective-C
- Reverse engineering i bezpieczeństwo aplikacji iOS — znajomość Objective-C i runtime przydatna w analizie bezpieczeństwa
Ścieżka nauki #
Objective-C jest technologią schyłkową — nowych projektów nie zaczyna się w Objective-C. Warto go poznać dla pracy z legacy kodem lub głębszego zrozumienia ekosystemu Apple.
Zacznij od (jeśli musisz):
- Podstawy składni: deklaracja klas (
@interface,@implementation), wysyłanie komunikatów, właściwości (@property) - Typy Foundation:
NSString,NSArray,NSDictionary,NSNumber— analogiczne do Swift String, Array, Dictionary - ARC i zarządzanie pamięcią:
strong,weak,copy - Xcode: tworzenie projektu z Objective-C, Interface Builder, Auto Layout
Dla nowych deweloperów iOS:
- Zacznij od Swift — nowoczesny, aktywnie rozwijany, preferowany przez Apple
- Naucz się czytać kod Objective-C — przyda się przy pracy z legacy projektami lub dokumentacją starszych API
FAQ #
- Czy warto uczyć się Objective-C w 2026 roku?
- Tylko jeśli masz konkretną potrzebę — pracę z legacy kodem lub projektem wymagającym Objective-C. Do nowych projektów Apple jednoznacznie rekomenduje Swift. Objective-C nie jest martwym językiem, ale jego ekosystem kurczy się z każdym rokiem. Nowi deweloperzy iOS powinni zaczynać od Swifta.
- Czym różni się Objective-C od Swift?
- Swift jest nowoczesnym językiem zaprojektowanym przez Apple od podstaw jako bezpieczny, zwięzły i wydajny następca Objective-C. Swift ma statyczne typowanie, opcjonale zamiast nil crashes, closures zamiast bloków, struktury value types. Objective-C ma dynamiczny runtime, syntaktyczną składnię Smalltalk i jest mniej bezpieczny typowo. Oba mogą współistnieć w jednym projekcie.
- Czy można mieszać Swift i Objective-C w jednym projekcie?
- Tak. Xcode obsługuje bridging header — plik, przez który Swift widzi kod Objective-C. W drugą stronę: Xcode generuje nagłówek z klas Swift oznaczonych @objc, dostępnych dla Objective-C. Wiele dużych aplikacji ma architekturę hybrydową — nowy kod w Swift, legacy w Objective-C.
- Czy frameworki Apple są napisane w Objective-C?
- Historycznie tak — UIKit, Foundation, AppKit były pisane w Objective-C. Apple stopniowo przepisuje je do Swift (SwiftUI zastępuje UIKit w nowym kodzie), ale rdzeń wielu frameworków wciąż to Objective-C, eksponowany przez Swift overlay. Dlatego znajomość Objective-C pomaga rozumieć komunikaty błędów i zachowania runtime.