- Objective-C je objektno orijentisani jezik kreiran kao proširenje C-a i koristi se decenijama u razvoju aplikacija za Apple.
- Ističe se svojom fleksibilnošću, kombinacijom C koda i objektne orijentacije, kompatibilnošću sa starijim API-jima i frameworkovima, te dinamičkim sistemom razmjene poruka.
- Trenutno koegzistira sa Swiftom u Apple projektima i ostaje neophodan 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 historiji i sadašnjosti programiranja za Apple sisteme. Ako ste čuli za kreiranje aplikacija za iOS ili macOS , gotovo sigurno ste naišli na ovaj jezik, jer je on već više od dvije decenije kamen temeljac razvoja u Apple ekosistemu.
U ovom članku ćemo istražiti sve što trebate znati da biste razumjeli Objective-C : njegove najizrazitije karakteristike, porijeklo, gdje se trenutno koristi i kako se poredi 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.
Šta je Objective-C?
Objective-C je objektno orijentisani programski jezik dizajniran da proširi jezik C, dajući mu mogućnosti tipične za objektno orijentisane jezike, posebno one inspirisane Smalltalkom. Njegovi počeci datiraju iz 1980-ih, zahvaljujući Bradu Coxu i StepStone Corporation, s ciljem da se C jeziku obezbijedi sistem 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ćava kreiranje i manipulisanje objektima, što znači da možete strukturirati svoj kod oko entiteta koji posjeduju i podatke i pridružene funkcije. Ovo je posebno korisno pri razvoju složenih aplikacija, jer promovira organizaciju koda, ponovnu upotrebu i održavanje.
Jedno od velikih dostignuća Objective-C-a je to što njegova sintaksa i rad omogućavaju kombinovanje koda napisanog u C-u sa objektno orijentisanim funkcionalnostima , čime se olakšava prelazak sa postojećih C projekata i integrišu nove, mnogo naprednije funkcije.
Historija i evolucija Objective-C-a
Porijeklo 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 koje ima Smalltalk, koji je u to vrijeme bio vodeći jezik za objektno orijentisano programiranje. Njihova namjera je bila spojiti snagu, brzinu i popularnost C-a s fleksibilnošću Smalltalka, stvarajući hibridni jezik koji je nudio najbolje iz oba svijeta.
Početna verzija je objavljena 1984. godine, a kasnije su je usvojile kompanije poput NeXT-a, kompanije koju je osnovao Steve Jobs nakon svog privremenog odlaska iz Applea. NeXT je integrirao Objective-C kao glavni jezik svog operativnog sistema NeXTSTEP, postavljajući temelje za ono što će kasnije postati macOS i iOS kada je Apple preuzeo NeXT krajem 90-ih.
Od tada, i skoro trideset godina, Objective-C je bio neosporni standard za razvoj softvera na Appleovim operativnim sistemima. 2014. godine, Apple je najavio Swift kao svoj novi referentni jezik za razvoj aplikacija, ali Objective-C je ostao bitan dio ekosistema, 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 neophodan 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 šta se koristi Objective-C?
Objective-C se posebno ističe kao primarni programski jezik koji Apple koristi za macOS i iOS operativne sisteme, kao i za svoje najpopularnije izvorne okvire: Cocoa i Cocoa Touch. Od grafičkog interfejsa Maca do najsloženijih mobilnih aplikacija za iPhone i iPad, Objective-C je olakšao kreiranje robusnog, efikasnog i održivog softvera.
Jedna od njegovih glavnih prednosti je što omogućava miješanje C koda i objektno orijentiranog koda , omogućavajuć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 napisan, djelomično ili u potpunosti, u Objective-C-u.
- Pristup starijim Apple API-jima: Mnoge sistemske funkcije dostupne su samo u ovom jeziku, što ga čini neophodnim 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 efikasnosti i kompatibilnosti.
- Kompatibilnost sa GNUstep-om i drugim platformama: Pored Apple-ovih, druge implementacije poput GNUstepa omogućavaju korištenje Objective-C-a na sistemima koji nisu Apple-ovi.
Glavne karakteristike Objective-C-a
Objective-C nudi niz funkcija koje visoko cijene programeri, posebno oni koji dolaze iz svijeta C-a. U nastavku ćemo pregledati najvažnije kako bismo razumjeli šta ga čini jedinstvenim u poređenju s drugim jezicima:
- Objektno orijentisani jezik: Sve se vrti oko objekata, što omogućava definiciju klasa, nasljeđivanje, polimorfizam i enkapsulaciju, kao i jasnu podjelu koda.
- Nadskup C: Čuva svu funkcionalnost C-a, omogućavajući uključivanje tradicionalnih skupova instrukcija (kao što su
while,for,do-while) i manipulirati primitivnim podacima zajedno s objektima. - Poruke u stilu "smalltalk"-a: Pozivanje metoda se vrši 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 kreiranje i oslobađanje svakog objekta, iako je od 2011. godine s dolaskom ARC-a (Automatic Reference Counting), ovaj zadatak značajno pojednostavljen.
- Podrška za C biblioteku: Omogućava 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: Možete definirati apstraktne interfejse koristeći protokole i dodati dodatne metode postojećim klasama koristeći kategorije.
Osnovna sintaksa i strukture Objective-C-a
Sintaksa Objective-C-a je jedna od njegovih definirajućih karakteristika i, iako na prvi pogled može izgledati čudno (posebno notacija zagrada za slanje poruka), prilično je logična i jednostavna kada se naviknete na nju. Evo kratkog 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 imena varijable koristi zvjezdica (MyClass *objeto;). - Slanje poruka: Da biste pozvali metodu objekta, koristite sintaksu zagrada:
; - Klase i metode: Definicija klase zauzima dvije datoteke: interfejs (
.h) i implementacija (.m). Koriste se direktive@interfacey@implementation. - Svojstva: Oni su definirani sa
@propertyi obično su praćeni@synthesizeda automatski implementira metode za getter i setter. - 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 sistem omogućava programerima da naslijede dio C logike, ali dodaje sloj apstrakcije i modularnosti koji je veoma cijenjen u velikim projektima.
Praktičan primjer: Zdravo 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 orijentisana paradigma u Objective-C-u
Objective-C u potpunosti usvaja objektno orijentiranu paradigmu , omogućavajuć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 kako bi nasljeđivala i modificirala ponašanja.
Nadalje, jedinstvena karakteristika je mogućnost dinamičkog slanja poruka objektima, što pogoduje razvoju visoko fleksibilnih programa s prilagodljivošću tokom izvođenja, ideja naslijeđena direktno iz Smalltalka.
Također je vrijedna pažnje mogućnost organiziranja koda pomoću kategorija , koje omogućavaju dodavanje dodatne funkcionalnosti postojećim klasama bez kreiranja podklasa, i protokola , koji omogućavaju definiranje ugovora metoda koje klase mogu usvojiti, slično interfejsima u drugim jezicima.
Kategorije i ekstenzije u Objective-C-u
Kategorije su jedan od najmoćnijih alata za proširenje funkcionalnosti klase bez mijenjanja njenog originalnog koda ili kreiranja podklasa. One vam omogućavaju dodavanje dodatnih metoda bilo kojoj klasi, čak i ako nemate pristup njenoj implementaciji, što je izuzetno korisno za organiziranje velikih kodnih baza ili implementaciju privatnih funkcionalnosti.
Sa svoje strane, ekstenzije (ili „ekstenzije klase“) služe za deklarisanje privatnih metoda i svojstava unutar same implementacije klase, omogućavajuć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 pridržavanje određenog protokola i obavezati se na implementaciju njegovih metoda. Ovo 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 bi mogle 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 - automatsko brojanje referenci ), 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 grešaka.
Osnovni ciklus se sastoji od:
- Kreiraj objekat (
alloc). - Koristite objekat.
- Otpustite predmet (
releaseoautorelease).
Sa 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 sa sakupljanjem smeća.
Svojstva i atributi: kontrola pristupa i memorija
u Svojstva u Objective-C-u proglašeni su od strane @property a njegovo upravljanje je ojačano kroz različite atribute koji kontrolišu kako se svaka vrijednost pohranjuje i pristupa njoj. Glavni atributi su:
- dodijeliti: Dodjeljuje vrijednost direktno, 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 objekat, povećavajući brojač svaki put kada mu se dodijeli.
- kopija: Kreira kopiju dodijeljenog objekta, korisno za tekstualne nizove ili nepromjenjive objekte.
- slab: Uveden sa ARC-om, definiše slabu referencu koja se automatski postavlja na
nilkada se originalni objekat oslobodi. - jaka: Jaka referenca osigurava da će objekt biti dostupan u memoriji sve dok svojstvo postoji.
Ova granularnost omogućava programerima da optimizuju potrošnju resursa i izbjegnu greške pri pristupu memoriji.
Poređenje: Objective-C vs Swift
Od 2014. godine, razvoj za Apple ekosistem karakterizira koegzistencija Objective-C i Swifta . Oba jezika imaju snage i slabosti, a izbor uveliko zavisi od vrste projekta i iskustva razvojnog tima.
Glavne prednosti Objective-C- a uključuju:
- Direktna kompatibilnost sa C i C++: Omogućava vam kombinovanje imperativnog i objektno orijentisanog koda, što je veoma cijenjeno u aplikacijama koje zahtevaju sirove performanse.
- Zrelost i stabilnost: To je jezik koji je godinama testiran, s velikom zajednicom i obilnom dokumentacijom.
- dinamizam: Njegov sistem za razmjenu poruka i refleksiju omogućava vam da mijenjate ponašanje aplikacija tokom izvođenja.
Swift, sa svoje strane, doprinosi:
- Veće sigurnosne garancije: Zahvaljujući statičkom tipiziranju, obradi greš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: Odlična podrška za imenske prostore, interaktivni razvoj s Playgrounds-ima i funkcionalne obrasce.
Gledajući unaprijed, sve ukazuje na to da će Swift nastaviti da dobija na popularnosti, ali Objective-C će ostati relevantan u velikim legacy projektima i u interoperabilnosti sa starijim frameworkovima.
Prednosti i mane Objective-C-a u odnosu na Swift
Vrijedi razmotriti neke ključne tačke koje mogu uticati na izbor jednog ili drugog jezika:
- Objective-C:
- Omogućava vam efikasan rad sa C i C++ bibliotekama.
- Nudi dinamičke funkcije, kao što je prebacivanje metoda, koje vam omogućavaju da modificirate ponašanje tokom izvođenja.
- Kompatibilan 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 grešaka koje je teško otkloniti.
- Sintaksa može izgledati složena i zastarjela novim programerima.
- brzo:
- Statičko tipiziranje i moderna sintaksa povećavaju sigurnost i produktivnost.
- Napredna podrška za funkcionalne obrasce i interaktivno upravljanje kodom s Playgrounds-om.
- Sporija kompajlacija na velikim projektima i određena nestabilnost u formatima modula ili interoperabilnosti sa 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:
Deklarisanje 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 Apple ekosistema, implementacije poput GNUstepa omogućavaju razvoj s ovim jezikom na drugim platformama, uključujući Linux i Windows. Međutim, njegova upotreba izvan macOS i iOS okruženja je vrlo ograničena i uglavnom vezana za nišne projekte ili interoperabilnost sa starijim kodom. Šta 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 komandne linije.
Objective-C resursi i učenje
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 kurseva. Od univerzitetskih platformi i škola za tehničku obuku do video kanala i službene Apple 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:
- Objašnjavajući video zapisi.
- E-knjige i praktični priručnici.
- Korak-po-korak tutorijali, i tekstualni i video.
- Online zajednice programera i tehnički forumi.
- Kursevi na specijaliziranim platformama, od osnovnih do naprednih nivoa.
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 upuštanje u nove projekte. Međutim, savladavanje Objective-C-a se i dalje toplo preporučuje ako ćete raditi u kompanijama sa starim kodnim bazama, održavati aplikacije koje su već u produkciji ili ako vas privlači unutrašnji rad Apple platformi. Kompatibilnost Objective-C-a sa Swiftom omogućava da oba jezika koegzistiraju u istom projektu, olakšavajući postepenu migraciju aplikacija bez potrebe za ponovnim izgradnjom svega od nule.
Nadalje, činjenica da Objective-C ostaje tehnički standard u mnogim aspektima razvoja za iOS i macOS garantuje njegovu relevantnost na tržištu rada, posebno za seniorske profile i za rukovodeće pozicije u arhitekturi ili tehničkoj struci.
Tokom ovog putovanja, vidjeli ste kako je jezik Objective-C označio prekretnicu u razvoju Apple softvera i kako je njegova filozofija, zasnovana na proširenju C-a i uključivanju objektno orijentisanih paradigmi, omogućila stvaranje robusnih, fleksibilnih i visoko prilagodljivih aplikacija. Iako je popularnost Swifta donekle potisnula njegovu upotrebu, savladavanje Objective-C-a ostaje fundamentalna prednost za svakog programera koji želi s lakoćom da se snalazi u Apple ekosistemu i da se nosi s izazovima modernog programiranja i održavanja velikih projekata. Bilo da se radi o razlozima kompatibilnosti, naslijeđenim arhitekturama ili jednostavno iz tehničke znatiželje, učenje Objective-C-a otvara vrata historiji i sadašnjosti potrošačkog računarstva.
Indeks
- 1 Šta je Objective-C?
- 2 Historija i evolucija Objective-C-a
- 3 Za šta se koristi Objective-C?
- 4 Glavne karakteristike Objective-C-a
- 5 Osnovna sintaksa i strukture Objective-C-a
- 6 Praktičan primjer: Zdravo svijete u Objective-C-u
- 7 Objektno orijentisana paradigma u Objective-C-u
- 8 Kategorije i ekstenzije 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 Poređenje: Objective-C vs Swift
- 13 Prednosti i mane Objective-C-a u odnosu na Swift
- 14 Praktične osnove i primjeri koda
- 15 Kompatibilnost i podržane platforme
- 16 Objective-C resursi i učenje
- 17 Zašto danas učiti Objective-C?
