30 najlepszych pytaĆ i odpowiedzi na rozmowie kwalifikacyjnej Objective-C (2026)

Przygotowanie do roli w Objective-C oznacza przewidywanie tego, co rekruterzy bÄdÄ
badaÄ poza skĆadniÄ
i modelami pamiÄciowymi. Rozmowa kwalifikacyjna w Objective-C ujawnia gĆÄbiÄ rozumowania, osÄ
d projektowy i praktyczne zrozumienie poprzez konsekwentnie ukierunkowane pytania.
Te pytania otwierajÄ
ĆcieĆŒki rozwoju dla poczÄ
tkujÄ
cych, inĆŒynierĂłw Ćredniego szczebla i starszych staĆŒem, odzwierciedlajÄ
c trendy branĆŒowe i realne rezultaty. Pracodawcy ceniÄ
sobie wiedzÄ technicznÄ
, analizÄ i stawianie problemĂłw przez specjalistĂłw z doĆwiadczeniem praktycznym, wspĂłĆpracujÄ
cych z liderami zespoĆĂłw i menedĆŒerami w celu zastosowania umiejÄtnoĆci Objective-C w Ćrodowiskach produkcyjnych. Taka perspektywa wspiera rozwĂłj na rĂłĆŒnych etapach kariery. Czytaj wiÄcej ...
NajwaĆŒniejsze pytania i odpowiedzi na rozmowie kwalifikacyjnej Objective-C
1) Czym jest Objective-C i dlaczego siÄ go uĆŒywa?
Objective-C to ĆcisĆy nadzbiĂłr jÄzyka programowania C ktĂłry dodaje moĆŒliwoĆci obiektowe i dynamiczne Ćrodowisko wykonawcze. ZostaĆ pierwotnie opracowany na poczÄ tku lat 1980. i jest gĆĂłwnym jÄzykiem uĆŒywanym do macOS i rozwoju aplikacji na iOS przed SwiftDziedziczy skĆadniÄ z jÄzyka C, ale wykorzystuje komunikacjÄ obiektĂłw w stylu Smalltalk, co pozwala na dynamiczne wywoĆywanie metod w czasie wykonywania.
Objective-C jest uĆŒywany do programowaniaping aplikacje natywne na platformach Apple poniewaĆŒ ĆciĆle integruje siÄ z frameworkami Apple, takimi jak Foundation i Cocoa/Cocoa Touch. DziÄki temu programiĆci mogÄ tworzyÄ aplikacje z peĆnym dostÄpem do interfejsĂłw API systemu i bogatych komponentĂłw interfejsu uĆŒytkownika.
PrzykĆad:
#import <Foundation/Foundation.h>
@interface Sample : NSObject
- (void)showMessage;
@end
@implementation Sample
- (void)showMessage {
NSLog(@"Hello from Objective-C!");
}
@end
int main() {
Sample *obj = [[Sample alloc] init];
[obj showMessage];
return 0;
}
2) WyjaĆnij podstawowÄ strukturÄ programu Objective-C.
Program Objective-C zazwyczaj skĆada siÄ z:
- Polecenia preprocesora (Takie jak
#import) - Interfejs (
@interface) â definiuje klasÄ i jej publiczne metody/wĆaĆciwoĆci - WdroĆŒenie (
@implementation) â zawiera definicje metod - Metody â funkcje zwiÄ zane z obiektami
- Zmienne oraz WyraĆŒenia i oĆwiadczenia â logika kodu
- Komentarze opisaÄ logikÄ kodu
Ta struktura wyraĆșnie oddziela interfejs od implementacji,ping modularyzacja kodu.
3) Czym sÄ protokoĆy w Objective-C i jakie istniejÄ ich typy?
W Objective-C, protokĂłĆ jest podobny do interfejsu w innych jÄzykach. Definiuje zestaw metod, ktĂłre kaĆŒda klasa moĆŒe przyjÄ Ä i zaimplementowaÄ, umoĆŒliwiajÄ c wielokrotne dziedziczenie sygnatur metod (nie implementacji).
IstniejÄ dwa typy:
- ProtokoĆy formalne â Zadeklarowano przy uĆŒyciu
@protocol; moĆŒe zdefiniowaÄ wymagany oraz fakultatywny Metody. - Nieformalne protokoĆy â Zwykle wdraĆŒane jako kategorie na
NSObject; opcjonalne z zaĆoĆŒenia.
Przypadek uĆŒycia: Wzorce delegowania w UIKit czÄsto wykorzystujÄ
protokoĆy (np. UITableViewDelegate).
4) Jaka jest rĂłĆŒnica miÄdzy #import i #include?
#includejest dyrektywÄ preprocesora C, ktĂłra wstawia zawartoĆÄ jednego pliku do drugiego, co moĆŒe powodowaÄ problemy z wielokrotnym wĆÄ czeniem.#importjest dyrektywÄ Objective-C, ktĂłra zapewnia, ĆŒe ââplik zostanie doĆÄ czony tylko pewnego razu, unikajÄ c powielania.
A zatem, #import jest bezpieczniejszy i preferowany w programowaniu Objective-C.
5) Do czego sĆuĆŒÄ kategorie w Objective-C?
Kategorie rozszerzajÄ
istniejÄ
cÄ
klasÄ o dodawanie metod bez tworzenia podklas lub modyfikowanie oryginalnego kodu. PozwalajÄ
logicznie dzieliÄ metody na grupy lub dodawaÄ dodatkowe zachowania do klas frameworka, takich jak NSString.
PrzykĆadowe zastosowanie: Dodawanie metod uĆŒytkowych do NSArray bez podklasyfikacji:
@interface NSArray (Utility) - (NSArray *)reversedArray; @end
6) Co robi @synthesize?
@synthesize dyrektywa mĂłwi kompilatorowi, aby generuj metody getter i setter dla nieruchomoĆci zadeklarowanej jako @property. Wymusza to hermetyzacjÄ i automatyzuje kod szablonowy.
PoniewaĆŒ Xcode 4.4, autosynteza jest domyĆlne â czÄsto nie trzeba pisaÄ @synthesize jawnie.
7) WyjaĆnij zarzÄ dzanie pamiÄciÄ w Objective-C.
Objective-C wykorzystuje Automatyczne zliczanie odniesieĆ (ARC) do zarzÄ dzania pamiÄciÄ . ARC dodaje generowane przez kompilator wywoĆania retain/release, ktĂłre zapewniajÄ , ĆŒe obiekty pozostajÄ aktywne tak dĆugo, jak to konieczne i sÄ zwalniane, gdy nie pozostajÄ ĆŒadne odwoĆania.
Kluczowe idee:
- Mocne odniesienia utrzymywaÄ obiekty przy ĆŒyciu
- SĆabe referencje nie zatrzymuj obiektĂłw, unikajÄ c cykli zatrzymywania
PrzykĆad:
@property (strong, nonatomic) NSString *name; @property (weak, nonatomic) id delegate;
8) Jaka jest rĂłĆŒnica miÄdzy NSArray i NSMutableArray?
- NSArray: Tablica niezmienna â jej zawartoĆÄ nie moĆŒe zostaÄ zmieniona po utworzeniu.
- NSMutableArray: Tablica zmienna â umoĆŒliwia dodawanie, usuwanie lub zastÄpowanie elementĂłw.
PrzykĆad:
NSMutableArray *list = [NSMutableArray arrayWithObjects:@"A", @"B", nil]; [list addObject:@"C"]; // Allowed
9) Na czym polega hermetyzacja danych w Objective-C?
Hermetyzacja danych ĆÄ czy dane i funkcje, ktĂłre na nich dziaĆajÄ , w jednÄ caĆoĆÄ. pojedyncza jednostka (klasa) jednoczeĆnie ograniczajÄ c bezpoĆredni dostÄp spoza klasy. Wymusza to moduĆowoĆÄ, ochronÄ danych i abs.traccja.
10) Jak dziaĆa wywoĆywanie metod w Objective-C?
Objective-C wykorzystuje przekazywanie wiadomoĆci skĆadnia:
[object methodName];
Tutaj, object otrzymuje wiadomoĆÄ do wywoĆania methodNameJeĆli metoda nie zostanie rozwiÄ
zana, Ćrodowisko wykonawcze obsĆuguje przekierowanie lub zgĆasza wyjÄ
tek. Ta elastycznoĆÄ jest potÄĆŒnÄ
cechÄ
dynamicznego Ćrodowiska wykonawczego Objective-C.
11) WyjaĆnij rĂłĆŒnicÄ miÄdzy silnymi, sĆabymi, przypisywanymi i kopiowanymi wĆaĆciwoĆciami w Objective-C.
WĆaĆciwoĆci Objective-C definiujÄ
sposĂłb zarzÄ
dzania pamiÄciÄ
dla odniesieĆ do obiektĂłw, a wybĂłr wĆaĆciwego atrybutu ma kluczowe znaczenie dla stabilnoĆci aplikacji. strong Atrybut zwiÄksza liczbÄ odwoĆaĆ do obiektu, zapewniajÄ
c jego obecnoĆÄ w pamiÄci tak dĆugo, jak dĆugo istnieje wĆaĆciwoĆÄ. Jest powszechnie uĆŒywany w przypadku relacji wĆasnoĆci. weak atrybut nie zachowuje obiektu, automatycznie ustawiajÄ
c odniesienie do nil gdy obiekt jest zwalniany, co pomaga zapobiegaÄ cyklom przechowywania, szczegĂłlnie w przypadku wzorcĂłw delegatĂłw.
assign Atrybut jest uĆŒywany dla prymitywnych typĂłw danych, takich jak liczby caĆkowite i zmiennoprzecinkowe. Nie zachowuje obiektĂłw i nie powinien byÄ uĆŒywany dla obiektĂłw Objective-C w ARC. Atrybut kopiowania tworzy copy przypisanego obiektu, co jest szczegĂłlnie waĆŒne w przypadku obiektĂłw zmiennych, takich jak NSMutableString aby zapobiec niezamierzonym modyfikacjom.
| Atrybut | Zachowuje obiekt | Przypadek uĆŒycia |
|---|---|---|
| silny | Tak | WĆasnoĆÄ |
| sĆaby | Nie | Delegaci |
| przydzielaÄ | Nie | Prymitywy |
| kopia | Kopie | Niezmienne bezpieczeĆstwo |
12) Jak wewnÄtrznie dziaĆa automatyczne zliczanie referencji (ARC)?
Automatyczne zliczanie referencji (ARC) to system zarzÄ dzania pamiÄciÄ w czasie kompilacji, ktĂłry automatycznie wstawia wywoĆania retain, release i autorelease. W przeciwieĆstwie do odĆmiecania pamiÄci, ARC nie jest uruchamiany w czasie wykonywania; zamiast tego kompilator analizuje cykle ĆŒycia obiektĂłw i okreĆla, gdzie potrzebne sÄ wywoĆania zarzÄ dzania pamiÄciÄ . Zapewnia to efektywne wykorzystanie pamiÄci bez ingerencji programisty.
ARC tracks silne odwoĆania do obiektĂłw i zwalnia je, gdy nie ma juĆŒ silnych odwoĆaĆ. SĆabe odwoĆania sÄ
automatycznie zerowane po zwolnieniu obiektu, co poprawia bezpieczeĆstwo aplikacji. ARC nie zarzÄ
dza rdzeniem. Foundation obiekty automatycznie, wiÄc techniki pomostowe, takie jak __bridge oraz __bridge_transfer sÄ
wymagane.
PrzykĆadowo, cykle retencji mogÄ nadal wystÄpowaÄ, gdy dwa obiekty silnie siÄ do siebie odwoĆujÄ , co naleĆŒy rozwiÄ zaÄ za pomocÄ sĆabych odniesieĆ.
13) Czym jest Ćrodowisko wykonawcze Objective-C i dlaczego jest waĆŒne?
Ćrodowisko wykonawcze Objective-C to zaawansowany system, ktĂłry umoĆŒliwia dynamiczne zachowanie programĂłw Objective-C. UmoĆŒliwia on rozwiÄ zywanie metod w czasie wykonywania, a nie w czasie kompilacji, co pozwala na korzystanie z takich funkcji, jak dynamiczne rozsyĆanie metod, przekazywanie komunikatĂłw i introspekcja.
To Ćrodowisko wykonawcze umoĆŒliwia Objective-C okreĆlenie metody, ktĂłrÄ naleĆŒy wywoĆaÄ tylko w momencie wysĆania wiadomoĆci. JeĆli metoda nie istnieje, Ćrodowisko wykonawcze oferuje wiele moĆŒliwoĆci jej obsĆuĆŒenia, na przykĆad przekazanie wiadomoĆci do innego obiektu. DziÄki temu Objective-C jest niezwykle elastyczny i rozszerzalny.
Funkcje Ćrodowiska wykonawczego pozwalajÄ rĂłwnieĆŒ programistom na inspekcjÄ hierarchii klas, dynamiczne dodawanie metod i modyfikowanie implementacji metod, co jest powszechnie stosowane w ramach debugowania i analiz.
14) Czym sÄ bloki w Objective-C i jakie sÄ ich korzyĆci?
Bloki w Objective-C to domkniÄcia, ktĂłre hermetyzujÄ kod i zmienne do pĂłĆșniejszego wykonania. SÄ podobne do wyraĆŒeĆ lambda w innych jÄzykach programowania i sÄ powszechnie uĆŒywane do wywoĆaĆ zwrotnych, wykonywania asynchronicznego i enumeracji.
Bloki przechwytujÄ
zmienne z otaczajÄ
cego je zakresu, ktĂłre moĆŒna modyfikowaÄ za pomocÄ
__block SĆowo kluczowe. UĆatwiajÄ
one czytelnoĆÄ kodu i redukujÄ
potrzebÄ stosowania wzorcĂłw delegatĂłw w wielu scenariuszach.
Zalety blokĂłw obejmujÄ
lepszÄ
lokalnoĆÄ kodu, lepszÄ
czytelnoĆÄ i ĆatwoĆÄ programowania asynchronicznego. ProgramiĆci muszÄ
jednak zachowaÄ ostroĆŒnoĆÄ w przypadku cykli retencji, gdy bloki silnie przechwytujÄ
. self, Za pomocÄ
__weak odwoĆania wewnÄ
trz blokĂłw zapobiegajÄ
wyciekom pamiÄci.
15) Jaka jest rĂłĆŒnica miÄdzy wartoĆciami nil i NULL w Objective-C?
W Objective-C, nil reprezentuje wskaĆșnik do obiektu zerowego, podczas gdy NULL reprezentuje wskaĆșnik zerowy dla typĂłw jÄzyka C. ChociaĆŒ czÄsto zwracajÄ
tÄ samÄ
wartoĆÄ (zero), rĂłĆŒniÄ
siÄ semantycznie i naleĆŒy ich uĆŒywaÄ odpowiednio.
nil jest uĆŒywany do obiektĂłw Objective-C i umoĆŒliwia bezpieczne wysyĆanie wiadomoĆci bez zawieszania aplikacji. Gdy wiadomoĆÄ jest wysyĆana do nil, po prostu zwraca zero lub nil. W przeciwieĆstwie do tego, dereferencjonowanie NULL wskaĆșnik w jÄzyku C powoduje niezdefiniowane zachowanie i czÄsto powoduje awariÄ aplikacji.
Korzystanie z nil poprawia bezpieczeĆstwo i czytelnoĆÄ kodu podczas pracy z obiektami Objective-C, NULL powinny byÄ zarezerwowane dla struktur i wskaĆșnikĂłw jÄzyka C.
16) WyjaĆnij delegowanie w Objective-C na przykĆadzie.
Delegacja to wzorzec projektowy w Objective-C, ktĂłry pozwala jednemu obiektowi komunikowaÄ zdarzenia lub decyzje innemu obiektowi. Jest on implementowany za pomocÄ protokoĆĂłw i sĆabych referencji, aby uniknÄ Ä cykli przechowywania. Delegacja promuje luĆșne powiÄ zania i moĆŒliwoĆÄ ponownego wykorzystania.
Obiekt delegujÄ cy definiuje protokĂłĆ, a obiekt delegata przyjmuje i implementuje ten protokĂłĆ. NastÄpnie obiekt delegujÄ cy wywoĆuje metody na swoim delegacie po wystÄ pieniu okreĆlonych zdarzeĆ.
Na przykĆad widok tabeli powiadamia swojego delegata o wybraniu wiersza. Taka konstrukcja pozwala na dostosowywanie zachowania bez tworzenia podklas i jest szeroko stosowana w frameworkach Apple.
17) Czym sÄ kategorie i rozszerzenia w Objective-C?
Kategorie i rozszerzenia pozwalajÄ programistom dodawaÄ funkcjonalnoĆÄ do istniejÄ cych klas, ale sĆuĆŒÄ rĂłĆŒnym celom. Kategorie dodajÄ metody publiczne do klasy i czÄsto sĆuĆŒÄ do porzÄ dkowania kodu lub dodawania metod uĆŒytkowych. Rozszerzenia, znane rĂłwnieĆŒ jako rozszerzenia klas, sÄ zazwyczaj deklarowane w plikach implementacji i umoĆŒliwiajÄ dodawanie prywatnych wĆaĆciwoĆci i metod.
Kategorie nie mogÄ dodawaÄ zmiennych instancji, natomiast rozszerzenia tak. Kategorie sÄ czÄsto uĆŒywane do rozszerzania klas frameworka, natomiast rozszerzenia sĆuĆŒÄ do hermetyzacji i szczegĂłĆĂłw implementacji wewnÄtrznej.
Zrozumienie tej rĂłĆŒnicy pozwala na lepsze projektowanie klas i poprawÄ ĆatwoĆci utrzymania.
18) Jak dziaĆa KVC (Key-Value Coding) w Objective-C?
Kodowanie klucz-wartoĆÄ (KVC) umoĆŒliwia poĆredni dostÄp do wĆaĆciwoĆci obiektu za pomocÄ kluczy ĆaĆcuchowych. UmoĆŒliwia dynamiczne ustawianie i pobieranie wartoĆci bez jawnego wywoĆywania metod getter lub setter.
KVC jest szeroko stosowany w powiÄ zaniach Cocoa i frameworkach serializacyjnych. Opiera siÄ na dobrze zdefiniowanym wzorcu wyszukiwania do rozwiÄ zywania kluczy i obsĆuguje operatory kolekcji do pracy z tablicami i zbiorami.
Na przykĆad, valueForKey: pobiera wartoĆÄ dynamicznie, podczas gdy setValue:forKey: Przypisuje wartoĆÄ. NieprawidĆowe uĆŒycie klucza moĆŒe skutkowaÄ wyjÄ
tkami w czasie wykonywania, dlatego wymagana jest staranna walidacja.
19) Czym jest KVO (Key-Value Observing) i czym rĂłĆŒni siÄ od powiadomieĆ?
Obserwacja wartoĆci klucza (KVO) pozwala obiektom obserwowaÄ zmiany okreĆlonych wĆaĆciwoĆci innego obiektu. Jest ĆciĆle powiÄ zana z KVC i umoĆŒliwia automatyczne powiadomienia o zmianie wartoĆci wĆaĆciwoĆci.
W przeciwieĆstwie do powiadomieĆ, KVO jest szczegĂłĆowe i specyficzne dla wĆaĆciwoĆci, podczas gdy powiadomienia sÄ oparte na transmisji. KVO wymaga odpowiedniego usuniÄcia obserwatora, aby uniknÄ Ä awarii, podczas gdy powiadomienia sÄ luĆșniej powiÄ zane.
KVO idealnie nadaje siÄ do obserwowania zmian modelu w architekturze MVC, natomiast powiadomienia lepiej sprawdzajÄ siÄ w przypadku zdarzeĆ obejmujÄ cych caĆy system.
20) Jakie sÄ zalety i wady stosowania Objective-C dzisiaj?
Objective-C oferuje dynamiczne funkcje Ćrodowiska uruchomieniowego, dojrzaĆe narzÄdzia i gĆÄbokÄ integracjÄ ze starszymi frameworkami Apple. UmoĆŒliwia elastyczne przetwarzanie komunikatĂłw i jest nadal szeroko stosowany w duĆŒych, dojrzaĆych bazach kodu.
JednakĆŒe Objective-C ma rozwlekĆÄ skĆadniÄ, bardziej stromÄ krzywÄ uczenia siÄ i zostaĆ w duĆŒej mierze zastÄ piony przez Swift dla nowego rozwoju. Swift zapewnia lepsze bezpieczeĆstwo, czytelnoĆÄ i optymalizacjÄ wydajnoĆci.
| WYGLÄD | Zalety | Wady |
|---|---|---|
| Czas pracy | Dynamiczny | Kompleks |
| SkĆadnia | PotÄĆŒny | Gadatliwy |
| ekosystem | DojrzaĆe MamuĆki | MalejÄ ca adopcja |
21) WyjaĆnij cykl ĆŒycia klasy Objective-C od alokacji do dealokacji.
Cykl ĆŒycia obiektu Objective-C rozpoczyna siÄ od alokacji pamiÄci i koĆczy na dealokacji. W starszych systemach ten cykl ĆŒycia jest zarzÄ
dzany gĆĂłwnie poprzez ARC lub rÄczne zliczanie referencji. Proces rozpoczyna siÄ od alloc, ktĂłry przydziela pamiÄÄ dla obiektu i inicjuje zmienne jego instancji do wartoĆci domyĆlnych. NastÄpnie nastÄpuje init, ktĂłra przygotowuje obiekt do uĆŒycia poprzez ustawienie stanu poczÄ
tkowego.
Po zainicjowaniu obiekt pozostaje aktywny, dopĂłki istnieje co najmniej jedno silne odwoĆanie. W trakcie swojego istnienia obiekt moĆŒe odbieraÄ komunikaty, uczestniczyÄ w delegowaniu i wchodziÄ w interakcje z innymi obiektami. Po zwolnieniu wszystkich silnych odwoĆaĆ, ARC automatycznie wywoĆuje dealloc, w ktĂłrym wykonywane sÄ
zadania porzÄ
dkowe, takie jak usuwanie obserwatorĂłw lub zwalnianie zasobĂłw.
Zrozumienie tego cyklu ĆŒycia jest kluczowe dla unikniÄcia wyciekĂłw pamiÄci, niedziaĆajÄ cych wskaĆșnikĂłw i niewĆaĆciwego zarzÄ dzania zasobami.
22) Jak dziaĆa przekazywanie wiadomoĆci w Objective-C?
Przekierowywanie komunikatĂłw to wieloetapowy mechanizm uĆŒywany, gdy obiekt otrzymuje komunikat, ktĂłrego nie moĆŒe obsĆuĆŒyÄ. Zamiast natychmiastowego zawieszenia, Objective-C oferuje kilka moĆŒliwoĆci dynamicznego rozwiÄ
zania metody. Najpierw Ćrodowisko wykonawcze sprawdza +resolveInstanceMethod: aby sprawdziÄ, czy metodÄ moĆŒna dodaÄ dynamicznie. JeĆli nie zostanie to rozwiÄ
zane, przechodzi do -forwardingTargetForSelector: aby przekierowaÄ wiadomoĆÄ do innego obiektu.
JeĆŒeli to siÄ nie powiedzie, Ćrodowisko wykonawcze wywoĆuje -methodSignatureForSelector: oraz -forwardInvocation: aby rÄcznie przesĆaÄ wiadomoĆÄ. UmoĆŒliwia to korzystanie z obiektĂłw proxy, dekoratorĂłw i dynamicznych zachowaĆ.
Mechanizm ten podkreĆla elastycznoĆÄ Objective-C i jest powszechnie stosowany w takich frameworkach jak NSProxy i bibliotekach mockingowych.
23) Czym sÄ cykle retencji i jak im zapobiegaÄ?
Cykl przechowywania wystÄpuje, gdy dwa lub wiÄcej obiektĂłw posiada silne referencje do siebie nawzajem, uniemoĆŒliwiajÄ
c ARC ich zwolnienie. Powoduje to wycieki pamiÄci, mimo ĆŒe obiekty nie sÄ
juĆŒ potrzebne. Cykle przechowywania czÄsto wystÄpujÄ
miÄdzy obiektami nadrzÄdnymi i podrzÄdnymi, delegatami i blokami przechwytujÄ
cymi. self.
Aby zapobiec cyklom retencji, programiĆci uĆŒywajÄ
sĆabych referencji do relacji niebÄdÄ
cych wĆasnoĆciÄ
, takich jak delegaci. W blokach, __weak or __unsafe_unretained odniesienia do self sĆuĆŒÄ
do unikniÄcia silnego schwytania.
Identyfikacja cykli przechowywania za pomocÄ instrumentĂłw i staranne projektowanie semantyki wĆasnoĆci to kluczowe umiejÄtnoĆci dla programistĂłw Objective-C pracujÄ cych nad dĆugotrwaĆymi aplikacjami.
24) W jaki sposĂłb Objective-C radzi sobie ze wspĂłĆbieĆŒnoĆciÄ i wielowÄ tkowoĆciÄ ?
Objective-C oferuje wiele mechanizmĂłw wspĂłĆbieĆŒnoĆci, z ktĂłrych najszerzej uĆŒywany jest Grand Central Dispatch (GCD). GCD pozwala programistom przesyĆaÄ zadania do kolejek, ktĂłre sÄ wykonywane szeregowo lub wspĂłĆbieĆŒnie.traczarzÄ dzanie wÄ tkami ts, zwiÄkszajÄ ce wydajnoĆÄ i bezpieczeĆstwo.
Inne narzÄdzia do wspĂłĆbieĆŒnoĆci obejmujÄ
NSThread, NSOperation, NSOperationQueue. Podczas NSThread zapewnia kontrolÄ niskiego poziomu, NSOperationQueue zapewnia zarzÄ
dzanie zaleĆŒnoĆciami, anulowanie i obsĆugÄ priorytetĂłw.
GCD jest ogĂłlnie preferowany w przypadku kodu o krytycznym znaczeniu dla wydajnoĆci, podczas gdy NSOperationQueue nadaje siÄ do zĆoĆŒonych przepĆywĂłw pracy wymagajÄ
cych szczegĂłĆowej kontroli.
25) Na czym polega metoda swizzlingu i kiedy naleĆŒy jÄ stosowaÄ?
PrzesuniÄcie metod to technika Ćrodowiska uruchomieniowego, ktĂłra pozwala programistom na zamianÄ implementacji dwĂłch metod. OsiÄ ga siÄ to za pomocÄ interfejsĂłw API Ćrodowiska uruchomieniowego Objective-C i umoĆŒliwia modyfikacjÄ dziaĆania bez tworzenia podklas lub modyfikowania oryginalnego kodu ĆșrĂłdĆowego.
Swizzling jest powszechnie uĆŒywany w frameworkach analitycznych, do rejestrowania, debugowania i testowania. NaleĆŒy jednak zachowaÄ ostroĆŒnoĆÄ, poniewaĆŒ moĆŒe on wprowadzaÄ nieoczekiwane zachowania, utrudniaÄ debugowanie i zakĆĂłcaÄ dziaĆanie w przypadku zmiany implementacji bazowych.
W kodzie produkcyjnym zamiana metod powinna byÄ starannie udokumentowana i ograniczona do dobrze zdefiniowanych przypadkĂłw uĆŒycia w celu zachowania stabilnoĆci kodu.
26) WyjaĆnij rĂłĆŒnicÄ miÄdzy tekstem pĆytkim i gĆÄbokim w Objective-C.
PĆytka kopia duplikuje obiekt kontenera, ale nie obiekty, ktĂłre on zawiera. ZarĂłwno kontener oryginalny, jak i skopiowany odwoĆujÄ siÄ do tych samych obiektĂłw bazowych. Natomiast gĆÄboka kopia duplikuje zarĂłwno kontener, jak i wszystkie zagnieĆŒdĆŒone obiekty, tworzÄ c niezaleĆŒne kopie.
Klasy kolekcji Objective-C zazwyczaj domyĆlnie wykonujÄ
pĆytkie kopie. GĆÄbokie kopiowanie wymaga jawnej implementacji, czÄsto przy uĆŒyciu NSCopying lub iteracja rÄczna.
| Typ kopiowania | Kontener skopiowany | Elementy skopiowane |
|---|---|---|
| PĆytki | Tak | Nie |
| GĆÄboki | Tak | Tak |
Zrozumienie tej rĂłĆŒnicy jest kluczowe podczas pracy ze zmiennymi strukturami danych, aby uniknÄ Ä niezamierzonych efektĂłw ubocznych.
27) W jaki sposĂłb Objective-C wspiera introspekcjÄ?
Introspekcja w Objective-C pozwala obiektom badaÄ wĆasnÄ
strukturÄ i zachowanie w czasie wykonywania. Obejmuje to sprawdzanie przynaleĆŒnoĆci do klas, dostÄpnoĆci metod i zgodnoĆci z protokoĆem. Metody takie jak isKindOfClass:, respondsToSelector:, conformsToProtocol: sÄ
powszechnie uĆŒywane.
Introspekcja umoĆŒliwia programowanie defensywne i dynamicznÄ adaptacjÄ zachowaĆ. Na przykĆad obiekt moĆŒe sprawdziÄ, czy inny obiekt implementuje metodÄ przed jej wywoĆaniem, co poprawia bezpieczeĆstwo w czasie wykonywania.
MoĆŒliwoĆÄ ta jest szczegĂłlnie uĆŒyteczna w systemach luĆșno powiÄ zanych i architekturach opartych na wtyczkach.
28) Jaka jest rĂłĆŒnica miÄdzy isEqual: i == w Objective-C?
== Operator porĂłwnuje adresy pamiÄci, ustalajÄ
c, czy dwa odwoĆania wskazujÄ
na ten sam obiekt. isEqual: Metoda ta porĂłwnuje zawartoĆÄ i logicznÄ
rĂłwnoĆÄ obiektĂłw.
Na przykĆad dwa rĂłĆŒne obiekty typu string z tÄ
samÄ
zawartoĆciÄ
tekstowÄ
mogÄ
zwrĂłciÄ NO w porĂłwnaniu z uĆŒyciem ==, ale YES w porĂłwnaniu z uĆŒyciem isEqual:. Wiele Foundation nadpisywanie klas isEqual: aby zapewniÄ sensowne porĂłwnania rĂłwnoĆci.
WybĂłr wĆaĆciwej metody porĂłwnywania jest kluczowy dla unikniÄcia bĆÄdĂłw logicznych, zwĆaszcza podczas pracy ze zbiorami, takimi jak zestawy i sĆowniki.
29) W jaki sposĂłb Objective-C integruje siÄ z C i C++ kod?
Objective-C jest w peĆni kompatybilny z C i moĆŒe wspĂłĆpracowaÄ z C++ poprzez Cel-C++. UĆŒywajÄ
c .mm pliki, programiĆci mogÄ
mieszaÄ Objective-C i C++ kod w tym samym pliku ĆșrĂłdĆowym.
Ta integracja umoĆŒliwia ponowne wykorzystanie istniejÄ cych jÄzykĂłw C i C++ biblioteki, korzystajÄ c jednoczeĆnie z obiektowych funkcji Objective-C. ProgramiĆci muszÄ ostroĆŒnie zarzÄ dzaÄ zmianami nazw i cyklami ĆŒycia obiektĂłw, aby uniknÄ Ä problemĂłw z pamiÄciÄ i zgodnoĆciÄ .
Cel-C++ jest powszechnie stosowany w aplikacjach, w ktĂłrych wydajnoĆÄ ma kluczowe znaczenie, takich jak silniki gier i przetwarzanie multimediĂłw.
30) Kiedy naleĆŒy wybraÄ Objective-C zamiast Swift w nowoczesnym rozwoju?
Objective-C jest nadal dobrym wyborem w przypadku utrzymywania duĆŒych baz kodu starszej generacji, integracji ze starszymi strukturami lub koniecznoĆci korzystania z zaawansowanych funkcji Ćrodowiska uruchomieniowego, ktĂłre nie sÄ Ćatwo osiÄ galne w SwiftDynamiczny system przesyĆania wiadomoĆci i dojrzaĆe narzÄdzia sprawiajÄ , ĆŒe nadaje siÄ on do niektĂłrych zadaĆ programistycznych niskiego poziomu lub zadaĆ zorientowanych na framework.
Jednak w przypadku nowych projektĂłw, Swift jest zazwyczaj preferowany ze wzglÄdu na zwiÄkszone bezpieczeĆstwo, czytelnoĆÄ i wydajnoĆÄ. Decyzja powinna byÄ podejmowana na podstawie wymagaĆ projektu, doĆwiadczenia zespoĆu i dĆugoterminowej moĆŒliwoĆci utrzymania.
Dobra znajomoĆÄ Objective-C pozostaje cenna, zwĆaszcza w przedsiÄbiorstwach, w ktĂłrych istnieje juĆŒ rozbudowana gama aplikacji Objective-C.
đ NajwaĆŒniejsze pytania do rozmĂłw kwalifikacyjnych Objective-C z realistycznymi scenariuszami i strategicznymi odpowiedziami
1) Jakie sÄ kluczowe rĂłĆŒnice miÄdzy Objective-C a Swift, a kiedy nadal wybraĆbyĆ Objective-C?
Oczekuje siÄ od kandydata: Osoba przeprowadzajÄ ca rozmowÄ kwalifikacyjnÄ chce oceniÄ TwojÄ znajomoĆÄ ekosystemu jÄzykowego i umiejÄtnoĆÄ podejmowania Ćwiadomych decyzji architektonicznych.
PrzykĆadowa odpowiedĆș: Objective-C to dynamiczny jÄzyk oparty na komunikatach, ktĂłry charakteryzuje siÄ silnymi moĆŒliwoĆciami dziaĆania w czasie wykonywania, Swift kĆadzie nacisk na bezpieczeĆstwo, wydajnoĆÄ i nowoczesnÄ skĆadniÄ. Nadal wybraĆbym Objective-C, utrzymujÄ c lub rozszerzajÄ c duĆŒe, starsze systemy iOS lub macOS bazy kodĂłw, w ktĂłrych nastÄ piĆo przepisanie Swift wprowadziĆoby niepotrzebne ryzyko i koszty.
2) Jak dziaĆa zarzÄ dzanie pamiÄciÄ w Objective-C w ramach ARC?
Oczekuje siÄ od kandydata: Osoba przeprowadzajÄ ca rozmowÄ kwalifikacyjnÄ sprawdza TwojÄ wiedzÄ na temat podstaw zarzÄ dzania pamiÄciÄ i tego, w jaki sposĂłb ARC moĆŒe je uproĆciÄ.
PrzykĆadowa odpowiedĆș: W ARC kompilator automatycznie wstawia wywoĆania retain i release w trakcie kompilacji. ProgramiĆci nadal muszÄ unikaÄ silnych cykli referencyjnych, uĆŒywajÄ c sĆabych referencji lub odpowiednio je przypisujÄ c, szczegĂłlnie w przypadku wzorcĂłw delegatĂłw i blokĂłw.
3) Czy moĆŒesz wyjaĆniÄ rĂłĆŒnicÄ pomiÄdzy wĆaĆciwoĆciami silnymi, sĆabymi i przypisanymi?
Oczekuje siÄ od kandydata: Osoba przeprowadzajÄ ca rozmowÄ kwalifikacyjnÄ chce siÄ upewniÄ, ĆŒe rozumiesz kwestie wĆasnoĆci obiektĂłw i zarzÄ dzania cyklem ĆŒycia.
PrzykĆadowa odpowiedĆș: Silne wĆaĆciwoĆci zwiÄkszajÄ liczbÄ zachowanych obiektĂłw i utrzymujÄ obiekt przy ĆŒyciu. SĆabe wĆaĆciwoĆci nie zachowujÄ obiektu i sÄ ustawiane na wartoĆÄ nil po zwolnieniu alokacji obiektu. Funkcja przypisywania jest zazwyczaj uĆŒywana w przypadku typĂłw prymitywnych i nie zarzÄ dza wĆasnoĆciÄ obiektu.
4) Opisz sytuacjÄ, w ktĂłrej debugowaĆeĆ trudnÄ awariÄ w aplikacji Objective-C.
Oczekuje siÄ od kandydata: Osoba przeprowadzajÄ ca rozmowÄ kwalifikacyjnÄ ocenia Twoje podejĆcie do rozwiÄ zywania problemĂłw i umiejÄtnoĆci debugowania.
PrzykĆadowa odpowiedĆș: Na moim poprzednim stanowisku debugowaĆem powtarzajÄ cy siÄ bĆÄ d spowodowany przez nadmiernÄ liczbÄ obiektĂłw w Ćrodowisku wielowÄ tkowym. UĆŒyĆem narzÄdzia Instruments z wĆÄ czonÄ funkcjÄ Zombies, aby⊠tracDokonano dealokacji i zidentyfikowano nieprawidĆowy atrybut wĆaĆciwoĆci, co po poprawieniu rozwiÄ zaĆo problem.
5) Czym kategorie rĂłĆŒniÄ siÄ od podklas w Objective-C?
Oczekuje siÄ od kandydata: Osoba przeprowadzajÄ ca rozmowÄ kwalifikacyjnÄ chce oceniÄ TwojÄ wiedzÄ na temat organizacji kodu i jego rozszerzalnoĆci.
PrzykĆadowa odpowiedĆș: Kategorie umoĆŒliwiajÄ dodawanie metod do istniejÄ cej klasy bez tworzenia podklas, co jest przydatne w przypadku modularyzacji funkcjonalnoĆci. Podklasy tworzÄ nowe hierarchie klas i mogÄ nadpisywaÄ zachowania, ale zwiÄkszajÄ sprzÄĆŒenie i zĆoĆŒonoĆÄ.
6) Czym sÄ bloki w Objective-C i w jaki sposĂłb sÄ powszechnie wykorzystywane?
Oczekuje siÄ od kandydata: Osoba przeprowadzajÄ ca rozmowÄ kwalifikacyjnÄ sprawdza TwojÄ znajomoĆÄ nowoczesnych wzorcĂłw jÄzyka Objective-C.
PrzykĆadowa odpowiedĆș: Bloki to zamkniÄcia, ktĂłre hermetyzujÄ kod i przechwycone zmienne. SÄ powszechnie uĆŒywane do asynchronicznych wywoĆaĆ zwrotnych, obsĆugi uzupeĆnieĆ i enumeracji. NaleĆŒy zachowaÄ ostroĆŒnoĆÄ, aby uniknÄ Ä cykli retencji poprzez uĆŒywanie sĆabych referencji do siebie.
7) Jak poradziĆbyĆ sobie z wÄ tkami i wspĂłĆbieĆŒnoĆciÄ w Objective-C?
Oczekuje siÄ od kandydata: Osoba przeprowadzajÄ ca rozmowÄ kwalifikacyjnÄ chce wiedzieÄ, w jaki sposĂłb zapewniasz wydajnoĆÄ i szybkoĆÄ reakcji.
PrzykĆadowa odpowiedĆș: Na poprzednim stanowisku w duĆŒym stopniu polegaĆem na systemie Grand Central Dispatch do zarzÄ dzania zadaniami w tle i aktualizacjami interfejsu uĆŒytkownika. UĆŒywaĆem kolejek szeregowych dla zapewnienia spĂłjnoĆci danych i kolejek wspĂłĆbieĆŒnych do operacji krytycznych dla wydajnoĆci.
8) WyjaĆnij wzorzec delegata i jego zalety.
Oczekuje siÄ od kandydata: Osoba przeprowadzajÄ ca rozmowÄ kwalifikacyjnÄ sprawdza TwojÄ wiedzÄ na temat popularnych wzorcĂłw projektowych stosowanych w programowaniu na iOS.
PrzykĆadowa odpowiedĆș: Wzorzec delegata pozwala jednemu obiektowi na komunikowanie zdarzeĆ lub danych z innym obiektem bez ĆcisĆego powiÄ zania. Promuje to separacjÄ zadaĆ i uĆatwia testowanie i utrzymanie kodu.
9) Opisz, w jaki sposĂłb dokonaĆbyĆ refaktoryzacji duĆŒej, starszej bazy kodu Objective-C.
Oczekuje siÄ od kandydata: Osoba przeprowadzajÄ ca rozmowÄ kwalifikacyjnÄ ocenia Twoje myĆlenie strategiczne i doĆwiadczenie w korzystaniu z przestarzaĆych systemĂłw.
PrzykĆadowa odpowiedĆș: Na moim ostatnim stanowisku podchodziĆem do refaktoryzacji stopniowo, dodajÄ c najpierw testy jednostkowe, izolujÄ c krytyczne komponenty i poprawiajÄ c czytelnoĆÄ kodu. UnikaĆem duĆŒych przerĂłbek i skupiaĆem siÄ na bezpiecznej redukcji dĆugu technicznego w miarÄ upĆywu czasu.
10) Jak zapewniÄ jakoĆÄ kodu i ĆatwoĆÄ jego utrzymania w projektach Objective-C?
Oczekuje siÄ od kandydata: Osoba przeprowadzajÄ ca rozmowÄ kwalifikacyjnÄ chce poznaÄ Twoje zainteresowania inĆŒynierskie i umiejÄtnoĆci pracy zespoĆowej.
PrzykĆadowa odpowiedĆș: W mojej poprzedniej pracy kĆadĆem nacisk na spĂłjne standardy kodowania, dokĆadne przeglÄ dy kodu i dokumentacjÄ. ZachÄcaĆem rĂłwnieĆŒ do tworzenia komponentĂłw wielokrotnego uĆŒytku i korzystania z narzÄdzi do analizy statycznej, aby wczeĆnie wykrywaÄ problemy.
