- Objective-C je objektno orijentirani jezik stvoren kao proširenje C-a i koristi se desetljećima u razvoju aplikacija za Apple.
- Ističe se svojom fleksibilnošću, kombinacijom C koda i objektne orijentacije, kompatibilnošću sa starijim API-jima i okvirima te dinamičkim sustavom razmjene poruka.
- Trenutno koegzistira sa Swiftom u Appleovim projektima i ostaje ključan za održavanje i interoperabilnost naslijeđenih aplikacija i biblioteka.

Objective-C je jedan od onih programskih jezika koji, iako u posljednje vrijeme donekle zasjenjen usponom Swifta, ostaje vitalni alat u povijesti i sadašnjosti programiranja za Apple sustave. Ako ste čuli za izradu aplikacija za iOS ili macOS , gotovo sigurno ste naišli na ovaj jezik, jer je on već više od dva desetljeća temelj razvoja u Appleovom ekosustavu.
U ovom ćemo članku istražiti sve što trebate znati da biste razumjeli Objective-C : njegove najizrazitije značajke, podrijetlo, gdje se trenutno koristi i kako se uspoređuje s alternativama poput Swifta. Također ćete vidjeti praktične primjere koji će vam pomoći da razumijete njegovu sintaksu, strukturu i mogućnosti, kao i ključne aspekte upravljanja memorijom, objektno orijentiranu paradigmu, protokole i još mnogo toga. Pripremite se, jer ćemo se pozabaviti svakim kutkom ovog fascinantnog jezika.
Što je Objective-C?
Objective-C je objektno orijentirani programski jezik osmišljen kako bi proširio jezik C, dajući mu mogućnosti tipične za objektno orijentirane jezike, posebno one inspirirane Smalltalkom. Njegovi počeci datiraju iz 1980-ih, zahvaljujući Bradu Coxu i StepStone Corporation, s ciljem da se C jeziku pruži sustav za razmjenu poruka u stilu Smalltalka koji bi omogućio veću fleksibilnost i modularnost u programiranju.
Za razliku od čistog C-a , Objective-C vam omogućuje stvaranje i manipuliranje objektima, što znači da možete strukturirati svoj kod oko entiteta koji posjeduju i podatke i pridružene funkcije. To je posebno korisno u razvoju složenih aplikacija, jer potiče organizaciju koda, ponovnu upotrebu i održavanje.
Jedno od velikih postignuća Objective-C-a je to što njegova sintaksa i rad omogućuju kombiniranje koda napisanog u C-u s objektno orijentiranim funkcionalnostima , čime se olakšava prijelaz s postojećih C projekata i integracija novih, mnogo naprednijih značajki.
Povijest i evolucija Objective-C-a
Podrijetlo Objective-C-a može se pratiti do 80-ih, kada su Brad Cox i Tom Love, softverski programeri u StepStoneu, prepoznali potrebu za dodavanjem mogućnosti C-u sličnih onima Smalltalka, koji je u to vrijeme bio vodeći jezik za objektno orijentirano programiranje. Njihova je namjera bila spojiti snagu, brzinu i popularnost C-a s fleksibilnošću Smalltalka, stvarajući hibridni jezik koji je nudio najbolje od oba svijeta.
Početna verzija objavljena je 1984. godine, a kasnije su je usvojile tvrtke poput NeXT-a, tvrtke koju je osnovao Steve Jobs nakon privremenog odlaska iz Applea. NeXT je integrirao Objective-C kao glavni jezik svog operativnog sustava NeXTSTEP, postavljajući temelje za ono što će kasnije postati macOS i iOS kada je Apple preuzeo NeXT krajem 90-ih.
Od tada, i gotovo trideset godina, Objective-C je neosporni standard za razvoj softvera na Appleovim operativnim sustavima. Godine 2014. Apple je najavio Swift kao svoj novi referentni jezik za razvoj aplikacija, ali Objective-C je ostao bitan dio ekosustava, posebno za održavanje postojećih aplikacija i pristup naslijeđenim API-jima i okvirima koji još nisu migrirani.
Trenutno , iako Swift dominira razvojem novih aplikacija, Objective-C ostaje ključan za timove koji rade na starijim kodnim bazama, okvirima koji nisu prilagođeni Swiftu i kao most za određene projekte na više platformi.
Za što se koristi Objective-C?
Objective-C se posebno ističe kao primarni programski jezik koji Apple koristi za operativne sustave macOS i iOS, kao i za svoje najpopularnije izvorne okvire: Cocoa i Cocoa Touch. Od grafičkog sučelja Maca do najsloženijih mobilnih aplikacija za iPhone i iPad, Objective-C je olakšao stvaranje robusnog, učinkovitog i održivog softvera.
Jedna od njegovih glavnih prednosti je što omogućuje miješanje C koda i objektno orijentiranog koda , omogućujući korištenje C biblioteka u modernim projektima, što je posebno korisno u aplikacijama koje zahtijevaju maksimalne performanse ili integraciju sa starijim kodom.
Neke od najistaknutijih upotreba Objective-C-a uključuju:
- Razvoj izvornih aplikacija za iOS i macOS: Čak i danas, dobar broj aplikacija na App Storeu je djelomično ili u potpunosti napisan u Objective-C-u.
- Pristup starijim Apple API-jima: Mnoge značajke sustava dostupne su samo u ovom jeziku, što ga čini ključnim za održavanje i poboljšanje dugogodišnjih projekata.
- Okviri i vlastite biblioteke: Uobičajeno je da veliki razvojni timovi nastave održavati Objective-C biblioteke radi učinkovitosti i kompatibilnosti.
- Kompatibilnost s GNUstepom i drugim platformama: Osim Applea, druge implementacije poput GNUstepa omogućuju korištenje Objective-C-a na sustavima koji nisu Appleovi.
Glavne značajke Objective-C-a
Objective-C nudi niz značajki koje visoko cijene programeri, posebno oni koji dolaze iz svijeta C-a. U nastavku ćemo pregledati najvažnije kako bismo razumjeli što ga čini jedinstvenim u usporedbi s drugim jezicima:
- Objektno orijentirani jezik: Sve se vrti oko objekata, što omogućuje definiranje klasa, nasljeđivanje, polimorfizam i enkapsulaciju, kao i jasnu podjelu koda.
- Nadskup C: Čuva svu funkcionalnost C-a, omogućujući uključivanje tradicionalnih skupova instrukcija (kao što su
while,for,do-while) i manipulirati primitivnim podacima uz objekte. - Poruke u stilu "smalltalka": Pozivanje metoda se izvodi slanjem poruka objektima, što pruža veliku fleksibilnost i dinamiku razvoja.
- Eksplicitno upravljanje memorijom: Za razliku od modernih jezika s automatskim upravljanjem memorijom, Objective-C zahtijeva od programera da kontrolira stvaranje i oslobađanje svakog objekta, iako je od 2011. godine dolaskom ARC-a (Automatic Reference Counting) taj zadatak značajno pojednostavljen.
- Podrška za C biblioteku: Omogućuje vam ponovnu upotrebu biblioteka napisanih u C-u, olakšavajući integraciju starog koda i povećavajući performanse kada je to potrebno.
- Podrška za protokole i kategorije: Apstraktna sučelja možete definirati pomoću protokola i dodati dodatne metode postojećim klasama pomoću kategorija.
Osnovna sintaksa i strukture Objective-C-a
Sintaksa Objective-C-a jedna je od njegovih definirajućih karakteristika i iako se na prvi pogled može činiti čudnom (posebno notacija zagrada za slanje poruka), prilično je logična i jednostavna kada se naviknete na nju. Evo pregleda ključnih elemenata:
- Deklaracija varijabli i primitivnih tipova: Baš kao u C-u, možete deklarirati jednostavne varijable poput
int,floatocharZa objekte se prije naziva varijable koristi zvjezdica (MyClass *objeto;). - Slanje poruka: Za pozivanje metode objekta koristi se sintaksa zagrada:
; - Klase i metode: Definicija klase zauzima dvije datoteke: sučelje (
.h) i implementacija (.m). Koriste se direktive@interfacey@implementation. - svojstva: Definirani su s
@propertyi obično su popraćeni@synthesizeautomatski implementirati metode za dobivanje i postavljanje. - Kontrola protoka: Prisutni su klasični C izrazi:
if,else,switch,while,for. - Vrste kolekcija: Postoje objekti za liste (NSArray, NSMutableArray), rječnike (NSDictionary, NSMutableDictionary) i skupove (NSSet, NSMutableSet).
Ovaj sustav omogućuje programerima nasljeđivanje dijela C logike, ali dodaje sloj apstrakcije i modularnosti koji je vrlo cijenjen u velikim projektima.
Praktičan primjer: Pozdrav svijete u Objective-C-u
Pogledajmo kako bi izgledao osnovni primjer u Objective-C-u za ispis "Hello World" u konzolu:
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
@autoreleasepool {
NSLog(@"Hola Mundo");
}
return 0;
}
U ovom fragmentu vidimo nekoliko elemenata:
- #uvoz : Uvozi Appleov osnovni objektni okvir.
- @autoreleasepool: Neophodno za upravljanje memorijom objekata, posebno kada se ne koristi ARC.
- NSLog: Funkcija za prikaz informacija u konzoli, ekvivalentna
printfu C-u, ali prilagođen Objective-C-u.
Objektno orijentirana paradigma u Objective-C-u
Objective-C u potpunosti usvaja objektno orijentiranu paradigmu , omogućujući vam rad s klasama, objektima, nasljeđivanjem, enkapsulacijom i polimorfizmom. Svaka klasa može definirati varijable instance, vlastite metode i svojstva te se može proširiti kroz podklase za nasljeđivanje i mijenjanje ponašanja.
Nadalje, jedinstvena značajka je mogućnost dinamičkog slanja poruka objektima, što pogoduje razvoju vrlo fleksibilnih programa s prilagodljivošću tijekom izvođenja, ideja naslijeđena izravno iz Smalltalka.
Također je vrijedna pažnje mogućnost organiziranja koda pomoću kategorija , koje omogućuju dodavanje dodatne funkcionalnosti postojećim klasama bez stvaranja podklasa, i protokola , koji omogućuju definiranje ugovora metoda koje klase mogu usvojiti, slično sučeljima u drugim jezicima.
Kategorije i proširenja u Objective-C-u
Kategorije su jedan od najmoćnijih alata za proširenje funkcionalnosti klase bez mijenjanja izvornog koda ili stvaranja podklasa. Omogućuju vam dodavanje dodatnih metoda bilo kojoj klasi, čak i ako nemate pristup njezinoj implementaciji, što je izuzetno korisno za organiziranje velikih kodnih baza ili implementaciju privatnih funkcionalnosti.
Sa svoje strane, ekstenzije (ili „ekstenzije klase“) služe za deklariranje privatnih metoda i svojstava unutar same implementacije klase, omogućujući tako veću enkapsulaciju i skrivanje internih detalja.
Protokoli u Objective-C-u
Protokoli funkcioniraju kao apstraktni ugovori koji definiraju metode koje klase mogu usvojiti i implementirati. Dakle, svaka klasa može naznačiti svoju privrženost određenom protokolu i obvezati se na implementaciju njegovih metoda. To pruža veliku fleksibilnost i pomaže u ispunjavanju obrazaca poput delegiranja, koji su toliko uobičajeni u razvoju iOS i macOS aplikacija.
Na primjer, protokol može specificirati metode kao što su turnOnEngine o beNiceToSister:, a različite klase mogle bi usvojiti ove protokole ako su zainteresirane za tu funkcionalnost.
Upravljanje memorijom: Zadržavanje, Otpuštanje i ARC
U Objective-C-u, upravljanje memorijom tradicionalno je bio jedan od najvećih izazova za programere. Prije pojave ARC-a ( Automatic Reference Counting ), bilo je potrebno ručno kontrolirati zadržavanje i dealokaciju svakog objekta, što je povećavalo rizik od curenja memorije i teško otkrivajućih pogrešaka.
Osnovni ciklus se sastoji od:
- Stvori objekt (
alloc). - Koristite objekt.
- Otpustite objekt (
releaseoautorelease).
S ARC-om, koji je ugrađen u Xcode 4.2 i iOS 4, sam kompajler automatski ubacuje instrukcije retain , release i autorelease , drastično pojednostavljujući život programera i približavajući Objective-C iskustvu drugih jezika s odvozom smeća.
Svojstva i atributi: kontrola pristupa i memorija
Las Svojstva u Objective-C-u proglašeni su od strane @property a njegovo upravljanje je pojačano raznim atributima koji kontroliraju kako se svaka vrijednost pohranjuje i pristupa njoj. Glavni atributi su:
- dodijeliti: Dodjeljuje vrijednost izravno, bez zadržavanja ili otpuštanja objekta (obično se koristi za primitivne tipove ili slabe reference).
- zadržati: Održava snažnu referencu na objekt, povećavajući brojač svaki put kada mu se dodijeli.
- kopirati: Stvara kopiju dodijeljenog objekta, korisno za tekstualne nizove ili nepromjenjive objekte.
- slab: Uveden s ARC-om, definira slabu referencu koja se automatski postavlja na
nilkada se izvorni objekt oslobodi. - jak: Jaka referenca osigurava da će objekt biti dostupan u memoriji sve dok svojstvo postoji.
Ova granularnost omogućuje programerima optimizaciju potrošnje resursa i izbjegavanje pogrešaka pri pristupu memoriji.
Usporedba: Objective-C vs Swift
Od 2014. godine, razvoj za Appleov ekosustav karakterizira koegzistencija Objective-C-a i Swifta . Oba jezika imaju snage i slabosti, a izbor uvelike ovisi o vrsti projekta i iskustvu razvojnog tima.
Glavne prednosti Objective-C-a uključuju:
- Izravna kompatibilnost s C i C++: Omogućuje vam kombiniranje imperativnog i objektno orijentiranog koda, što je vrlo cijenjeno u aplikacijama koje zahtijevaju sirove performanse.
- Zrelost i stabilnost: To je jezik koji je godinama testiran, s velikom zajednicom i obilnom dokumentacijom.
- Dinamičnost: Njegov sustav za razmjenu poruka i refleksiju omogućuje vam mijenjanje ponašanja aplikacija tijekom izvođenja.
Swift, sa svoje strane, doprinosi:
- Veća sigurnosna jamstva: Zahvaljujući statičkom tipiziranju, obradi pogrešaka i modernom upravljanju memorijom.
- Jasnija i konciznija sintaksa: Olakšava pisanje i održavanje koda, posebno za one koji ne dolaze iz C svijeta.
- Moderni alati: Izvrsna podrška za imenske prostore, interaktivni razvoj s Playgroundsima i funkcionalne obrasce.
Gledajući unaprijed, sve ukazuje na to da će Swift nastaviti dobivati na popularnosti, ali Objective-C će ostati relevantan u velikim naslijeđenim projektima i u interoperabilnosti sa starijim frameworkovima.
Prednosti i nedostaci Objective-C-a u odnosu na Swift
Vrijedi pregledati neke ključne točke koje mogu utjecati na izbor jednog ili drugog jezika:
- Objective-C:
- Omogućuje vam učinkovit rad s C i C++ bibliotekama.
- Nudi dinamičke značajke, poput prebacivanja metoda, koje vam omogućuju mijenjanje ponašanja tijekom izvođenja.
- Kompatibilno s postojećim binarnim okvirima i bibliotekama trećih strana.
- Međutim, ima mali imenski prostor, što može dovesti do sukoba u velikim projektima i teško ispraviti pogreške.
- Sintaksa se novim programerima može činiti složenom i zastarjelom.
- Brz:
- Statičko tipiziranje i moderna sintaksa povećavaju sigurnost i produktivnost.
- Napredna podrška za funkcionalne obrasce i interaktivno upravljanje kodom s Playgroundsima.
- Sporija kompilacija na velikim projektima i određena nestabilnost u formatima modula ili interoperabilnosti s C++.
Praktične osnove i primjeri koda
Za one koji su novi u svijetu Objective-C-a, moglo bi biti korisno pregledati neke praktične primjere njegove upotrebe u stvarnim projektima. Evo nekih ključnih struktura i koncepata:
Deklariranje klasa i metoda
// Archivo de cabecera: MyClass.h
#import <Foundation/Foundation.h>
@interface MyClass : NSObject
@property int contador;
- (void)incrementar;
@end
// Archivo de implementación: MyClass.m
#import "MyClass.h"
@implementation MyClass
- (void)incrementar {
self.contador++;
}
@end
U ovom primjeru, MyClass nasljeđuje od NSObject-a , korijenske klase većine objekata u Cocoa-i.
Korištenje nizova i rječnika
NSArray *array = @;
NSString *elemento = array; // "dos"
NSDictionary *diccionario = @{ @"clave1": @"valor1", @"clave2": @"valor2" };
NSString *valor = diccionario; // "valor1"
Petlje i kontrolne strukture
for (int i = 0; i < 5; i++) { NSLog(@"Iteración %d", i); } if (array.count > 2) {
NSLog(@"El array tiene más de dos elementos");
}
Klasično upravljanje memorijom (bez ARC-a)
MyClass *objeto = init];
// Se usa el objeto
; // Liberar cuando termine de usarse
Kompatibilnost i podržane platforme
Iako je Objective-C neodvojiv od Appleovog ekosustava, implementacije poput GNUstepa omogućuju razvoj s ovim jezikom na drugim platformama, uključujući Linux i Windows. Međutim, njegova upotreba izvan macOS i iOS okruženja vrlo je ograničena i općenito vezana za nišne projekte ili interoperabilnost sa starijim kodom. Što je Objective-C?
Unutar Applea, Objective-C ostaje podržan na svim modernim verzijama macOS-a, iOS-a, iPadOS-a, tvOS-a i watchOS-a te je održiva opcija i u Xcodeu i u alatima naredbenog retka.
Resursi i učenje za Objective-C
Za one koji žele naučiti ili poboljšati svoje vještine korištenja Objective-C-a, dostupno je mnoštvo materijala, tutorijala i online tečajeva. Od sveučilišnih platformi i škola za tehničku obuku do video kanala i službene Appleove dokumentacije, učenje je jednostavno i raznoliko. Naučite kako postati uspješan programer mobilnih aplikacija.
Među najčešćim opcijama za obuku su:
- Video s objašnjenjima.
- E-knjige i praktični priručnici.
- Detaljni tutorijali, i tekstualni i video.
- Online zajednice programera i tehnički forumi.
- Tečajevi na specijaliziranim platformama od osnovnih do naprednih razina.
Osim toga, mnoge od ovih platformi nude certifikate za one koji završe programe obuke, što može biti prednost pri traženju posla u tom sektoru.
Zašto danas učiti Objective-C?
Možda se čini besmislenim učiti Objective-C ovih dana, posebno ako vam je glavni cilj započeti nove projekte. Međutim, savladavanje Objective-C-a i dalje se toplo preporučuje ako ćete raditi u tvrtkama sa starim kodnim bazama, održavati aplikacije koje su već u produkciji ili ako vas privlači unutarnji rad Apple platformi. Kompatibilnost Objective-C-a sa Swiftom omogućuje koegzistenciju oba jezika u istom projektu, olakšavajući postupnu migraciju aplikacija bez potrebe za ponovnom izgradnjom svega od nule.
Nadalje, činjenica da Objective-C ostaje tehnički standard u mnogim aspektima razvoja za iOS i macOS jamči njegovu relevantnost na tržištu rada, posebno za više profile te za arhitektonske ili tehničke vodeće uloge.
Tijekom ovog putovanja vidjeli ste kako je jezik Objective-C označio prekretnicu u razvoju Appleovog softvera i kako je njegova filozofija, temeljena na proširenju C-a i uključivanju objektno orijentiranih paradigmi, omogućila stvaranje robusnih, fleksibilnih i visoko prilagodljivih aplikacija. Iako je popularnost Swifta donekle istisnula njegovu upotrebu, savladavanje Objective-C-a ostaje temeljna prednost za svakog programera koji želi s lakoćom navigirati Appleovim ekosustavom i uhvatiti se u koštac s izazovima modernog programiranja i održavanja velikih projekata. Bilo zbog razloga kompatibilnosti, naslijeđenih arhitektura ili jednostavno iz tehničke znatiželje, učenje Objective-C-a otvara vrata povijesti i sadašnjosti potrošačkog računarstva.
Indeks
- 1 Što je Objective-C?
- 2 Povijest i evolucija Objective-C-a
- 3 Za što se koristi Objective-C?
- 4 Glavne značajke Objective-C-a
- 5 Osnovna sintaksa i strukture Objective-C-a
- 6 Praktičan primjer: Pozdrav svijete u Objective-C-u
- 7 Objektno orijentirana paradigma u Objective-C-u
- 8 Kategorije i proširenja u Objective-C-u
- 9 Protokoli u Objective-C-u
- 10 Upravljanje memorijom: Zadržavanje, Otpuštanje i ARC
- 11 Svojstva i atributi: kontrola pristupa i memorija
- 12 Usporedba: Objective-C vs Swift
- 13 Prednosti i nedostaci Objective-C-a u odnosu na Swift
- 14 Praktične osnove i primjeri koda
- 15 Kompatibilnost i podržane platforme
- 16 Resursi i učenje za Objective-C
- 17 Zašto danas učiti Objective-C?
