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

Pytania i odpowiedzi na rozmowę kwalifikacyjną Objective-C

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 ...

👉 BezpƂatne pobieranie pliku PDF: Pytania i odpowiedzi na rozmowę kwalifikacyjną dotyczącą języka Objective-C

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:

  1. Polecenia preprocesora (Takie jak #import)
  2. Interfejs (@interface) – definiuje klasę i jej publiczne metody/wƂaƛciwoƛci
  3. WdroĆŒenie (@implementation) – zawiera definicje metod
  4. Metody – funkcje związane z obiektami
  5. Zmienne oraz WyraĆŒenia i oƛwiadczenia – logika kodu
  6. 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?

  • #include jest dyrektywą preprocesora C, ktĂłra wstawia zawartoƛć jednego pliku do drugiego, co moĆŒe powodować problemy z wielokrotnym wƂączeniem.
  • #import jest 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.

Podsumuj ten post następująco: