30 parimat Objective-C intervjuuküsimust ja vastust (2026)

Objective-C intervjuuküsimused ja vastused

Objective-C rolliks valmistumine tähendab ettenägelikkust, mida intervjueerijad uurivad lisaks süntaksile ja mälumudelitele. Objective-C intervjuu paljastab järjepidevalt suunatud küsimuste kaudu arutluskäigu sügavuse, disainilahenduse otsustusvõime ja praktilise arusaamise.

Need küsimused avavad teid nii algajatele, keskastme inseneridele kui ka vanematele tudengitele, peegeldades valdkonna trende ja tegelikke tulemusi. Tööandjad hindavad praktilise kogemusega spetsialistide tehnilist oskusteavet, analüüsi ja probleemide püstitamist, tehes koostööd meeskonnajuhtide ja halduritega, et rakendada Objective-C oskusi tootmiskeskkondades. See perspektiiv toetab kasvu erinevates karjäärietappides.
Loe rohkem…

👉 Tasuta PDF-i allalaadimine: Objective-C intervjuuküsimused ja vastused

Parimad Objective-C intervjuuküsimused ja vastused

1) Mis on Objective-C ja miks seda kasutatakse?

Objective-C on C programmeerimiskeele range ülemhulk mis lisab objektorienteeritud võimalusi ja dünaamilist käituskeskkonda. See töötati algselt välja 1980. aastate alguses ja on peamine keel, mida kasutatakse macOS ja iOS-i rakenduste arendus enne SwiftSee pärib C-keele süntaksi, kuid kasutab objektide jaoks Smalltalki stiilis sõnumsidet, mis võimaldab meetodeid käitusajal dünaamiliselt kutsuda.

Objective-C-d kasutatakse arendamiseks natiivsed rakendused Apple'i platvormidel sest see integreerub tihedalt Apple'i raamistikega, näiteks Foundation ja Cocoa/Cocoa Touch. See võimaldab arendajatel luua rakendusi, millel on täielik juurdepääs süsteemi API-dele ja rikkalikele kasutajaliidese komponentidele.

Näide:

#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) Selgitage Objective-C programmi põhistruktuuri.

Objective-C programm koosneb tavaliselt järgmisest:

  1. Eelprotsessori käsud (nagu näiteks #import)
  2. Interface (@interface) – defineerib klassi ja selle avalikud meetodid/omadused
  3. Täitmine (@implementation) – sisaldab meetodi definitsioone
  4. Meetodid – objektidega seotud funktsioonid
  5. Muutujad ja Väljendid ja avaldused – koodi loogika
  6. Kommentaarid koodiloogika kirjeldamiseks

See struktuur eraldab liidese implementatsioonist selgelt, aidates koodi modulariseerida.


3) Mis on Objective-C protokollid ja mis tüüpi on olemas?

Objective-C-s a protokoll on sarnane teiste programmeerimiskeelte liidesega. See defineerib meetodite komplekti, mida iga klass saab omaks võtta ja rakendada, võimaldades meetodi signatuuride mitmekordset pärimist (mitte rakendamist).

Neid on kahte tüüpi:

  • Formaalsed protokollid – Deklareeritud kasutades @protocol; oskab defineerida nõutav ja Valikuline meetodid.
  • Mitteametlikud protokollid – Tavaliselt rakendatakse kategooriatena NSObject; konstruktsioonilt valikuline.

Kasutusjuhtum: UIKiti delegeerimismustrid kasutavad sageli protokolle (nt UITableViewDelegate).


4) Mis vahe on käskudel #import ja #include?

  • #include on C eeltöötluse direktiiv, mis lisab ühe faili sisu teise, mis võib põhjustada mitu kaasamisprobleemi.
  • #import on Objective-C direktiiv, mis tagab, et kaasatakse ainult üks fail. kunagi, vältides dubleerimist.

Seega #import on Objective-C arenduses ohutum ja eelistatum.


5) Mis kasu on kategooriatest Objective-C-s?

Kategooriad laiendavad olemasolevat klassi meetodite lisamine ilma alamklassideta või muutes algset koodi. Need võimaldavad teil meetodeid loogiliselt rühmadesse eraldada või raamistikuklassidele lisakäitumist lisada, näiteks NSString.

Kasutamise näide: Kasulike meetodite lisamine NSArray ilma alamklassideta:

@interface NSArray (Utility)
- (NSArray *)reversedArray;
@end

6) Mida teeb @synthesize?

. @synthesize direktiiv käsib kompilaatoril genereeri getter ja setter meetodeid kinnisvara puhul, mis on deklareeritud koos @propertySee jõustab kapseldamise ja automatiseerib standardse koodi.

Alates Xcode 4.4 autosüntees on vaikimisi – sageli pole vaja kirjutada @synthesize selgesõnaliselt.


7) Selgitage mäluhaldust Objective-C-s.

Objective-C kasutusalad Automaatne võrdlusloendus (ARC) mälu haldamiseks. ARC lisab kompilaatori loodud säilitamis-/vabastamiskäsud, mis tagavad objektide püsimise nii kaua kui vaja ja on vabastatud, kui viiteid enam pole.

Põhimõisted:

  • Tugevad viited hoia esemeid elus
  • Nõrgad viited ärge hoidke objekte alles, vältides säilitamistsükleid

Näide:

@property (strong, nonatomic) NSString *name;
@property (weak, nonatomic) id delegate;

8) Mis vahe on NSArray'l ja NSMutableArray'l?

  • NArray: Muutumatu massiiv – sisu ei saa pärast loomist muutuda.
  • NSMutableArray: Muudetav massiiv — võimaldab elemente lisada, eemaldada või asendada.

Näide:

NSMutableArray *list = [NSMutableArray arrayWithObjects:@"A", @"B", nil];
[list addObject:@"C"]; // Allowed

9) Mis on andmete kapseldamine Objective-C-s?

Andmete kapseldamine seob andmed ja nende peal töötavad funktsioonid ühtseks tervikuks. üksiküksus (klass) samal ajal piirates otsest juurdepääsu väljastpoolt klassi. See tagab modulaarsuse, andmekaitse ja abstraktsiooni.


10) Kuidas meetodi kutsumine Objective-C-s töötab?

Objective-C kasutusalad sõnumi edastamine süntaks:

[object methodName];

Siin object saab sõnumi, mida kutsuda methodNameKui meetodit ei lahendata, tegeleb käituskeskkond edasisaatmisega või viskab erandi. See paindlikkus on Objective-C dünaamilise käituskeskkonna võimas omadus.


11) Selgitage Objective-C-s omaduste strong (tugev), weak (nõrk), assign (määra) ja copy (kopeeri) erinevust.

Objective-C omadused määravad, kuidas mälu objektiviidete jaoks hallatakse, ja õige atribuudi valimine on rakenduse stabiilsuse seisukohalt kriitilise tähtsusega. strong atribuut suurendab objekti viitenumbrite arvu, tagades, et see jääb mällu seni, kuni atribuut eksisteerib. Seda kasutatakse tavaliselt omandisuhete puhul. weak atribuut ei säilita objekti, määrates viite automaatselt väärtusele nil kui objekt vabastatakse, mis aitab vältida säilitamistsükleid, eriti delegeerimismustrites.

. assign atribuuti kasutatakse primitiivsete andmetüüpide, näiteks täisarvude ja ujukomaarvude jaoks. See ei säilita objekte ja seda ei tohiks kasutada Objective-C objektide jaoks ARC all. Atribuut copy loob copy määratud objektist, mis on eriti oluline muudetavate objektide puhul, näiteks NSMutableString tahtmatu muutmise vältimiseks.

Atribuut Säilitab objekti Kasuta Case'it
tugev Jah Omandiõigus
nõrk Ei Delegaadid
määrama Ei Primaadid
koopia Koopiad Muutumatu ohutus

12) Kuidas automaatne võrdlusloendus (ARC) sisemiselt töötab?

Automaatne viidete loendamine (ARC) on kompileerimise ajal kasutatav mäluhaldussüsteem, mis lisab automaatselt säilitamise, vabastamise ja automaatse vabastamise kõned. Erinevalt prügikoristusest ei tööta ARC käitusajal; selle asemel analüüsib kompilaator objektide elutsükleid ja määrab, kus on vaja mäluhalduskõnesid. See tagab tõhusa mälukasutuse ilma arendaja sekkumiseta.

ARC jälgib objektide tugevaid viiteid ja vabastab need, kui tugevaid viiteid enam pole. Nõrgad viited nullitakse objekti vabastamisel automaatselt, parandades rakenduse ohutust. ARC ei halda Core'i. Foundation objektid automaatselt, seega ühendavad sildamistehnikad, näiteks __bridge ja __bridge_transfer on vaja.

Näiteks võivad säilitustsüklid siiski esineda, kui kaks objekti viitavad teineteisele tugevalt, mis tuleb lahendada nõrkade viidete abil.


13) Mis on Objective-C käituskeskkond ja miks see on oluline?

Objective-C käituskeskkond on võimas süsteem, mis võimaldab Objective-C programmides dünaamilist käitumist. See võimaldab meetodeid lahendada käitusajal, mitte kompileerimise ajal, pakkudes selliseid funktsioone nagu dünaamiline meetodite saatmine, sõnumite edastamine ja enesevaatlus.

See käituskeskkond võimaldab Objective-C-l määrata, millist meetodit kutsuda ainult siis, kui sõnum on saadetud. Kui meetodit pole olemas, pakub käituskeskkond selle käsitlemiseks mitu võimalust, näiteks sõnumi edastamiseks teisele objektile. See muudab Objective-C väga paindlikuks ja laiendatavaks.

Käitusaja funktsioonid võimaldavad arendajatel ka klasside hierarhiaid kontrollida, meetodeid dünaamiliselt lisada ja meetodite implementatsioone hõlpsalt muuta, mida tavaliselt kasutatakse silumis- ja analüüsiraamistikes.


14) Mis on Objective-C plokid ja millised on nende eelised?

Objective-C plokid on sulgemised, mis kapseldavad koodi ja muutujaid hilisemaks täitmiseks. Need sarnanevad teiste programmeerimiskeelte lambda-avaldistega ja neid kasutatakse tavaliselt tagasihelistamiseks, asünkroonseks täitmiseks ja loendamiseks.

Plokid hõivavad muutujaid ümbritsevast ulatusest, mida saab muuta funktsiooni abil. __block märksõna. Need lihtsustavad koodi loetavust ja vähendavad paljudes stsenaariumides delegeerimismustrite vajadust.

Plokkide eeliste hulka kuuluvad parem koodi lokaalsus, parem loetavus ja asünkroonse programmeerimise lihtsus. Arendajad peavad aga olema ettevaatlikud säilitamistsüklite suhtes, kui plokid püüavad tugevalt kinni. self. Kasutades __weak Plokkide sees olevad viited hoiavad ära mälulekked.


15) Mis vahe on nil ja NULL väärtustel Objective-C-s?

Objective-C-s nil tähistab nullobjekti pointerit, samas kui NULL tähistab C tüüpide puhul null-pointerit. Kuigi need annavad sageli sama väärtuse (null), on nad semantiliselt erinevad ja neid tuleks vastavalt kasutada.

nil kasutatakse Objective-C objektide jaoks ja see võimaldab sõnumeid turvaliselt saata ilma rakendust krahhita. Kui sõnum saadetakse aadressile nil, tagastab see lihtsalt nulli või nilSeevastu viitamise tühistamine NULL C-keeles pointer põhjustab määratlemata käitumist ja sageli rakenduse krahhi.

Kasutamine nil parandab koodi turvalisust ja loetavust Objective-C objektidega tegelemisel, samal ajal NULL tuleks reserveerida C struktuuride ja pointerite jaoks.


16) Selgitage delegeerimist Objective-C-s näite abil.

Delegeerimine on Objective-C disainimuster, mis võimaldab ühel objektil edastada sündmusi või otsuseid teisele objektile. See rakendatakse protokollide ja nõrkade viidete abil, et vältida säilitustsükleid. Delegeerimine soodustab lõdvat sidumist ja korduvkasutatavust.

Delegeeriv objekt defineerib protokolli ning delegeeriv objekt võtab selle protokolli omaks ja rakendab seda. Seejärel kutsub delegeeriv objekt teatud sündmuste toimumisel oma delegeeritavale objektile meetodeid.

Näiteks tabelivaade teavitab delegaati rea valimisel. See disain võimaldab käitumist kohandada ilma alamklassideta ja seda kasutatakse laialdaselt Apple'i raamistikes.


17) Mis on Objective-C kategooriad ja mis on laiendused?

Kategooriad ja laiendused võimaldavad mõlemad arendajatel olemasolevatele klassidele funktsionaalsust lisada, kuid neil on erinevad eesmärgid. Kategooriad lisavad klassile avalikke meetodeid ja neid kasutatakse sageli koodi korraldamiseks või utiliidimeetodite lisamiseks. Laiendused, tuntud ka kui klassilaiendid, deklareeritakse tavaliselt rakendusfailides ja võimaldavad lisada privaatseid omadusi ja meetodeid.

Kategooriad ei saa lisada eksemplari muutujaid, laiendused aga saavad. Kategooriaid kasutatakse sageli raamistikuklasside täiustamiseks, laiendusi aga kapseldamiseks ja sisemiste implementatsioonidetailide jaoks.

Erinevuse mõistmine tagab parema klassi kujundamise ja hooldatavuse.


18) Kuidas KVC (võtme-väärtuse kodeerimine) Objective-C-s töötab?

Võtme-väärtuse kodeerimine (KVC) võimaldab objekti omadustele kaudset juurdepääsu stringvõtmete abil. See võimaldab väärtusi dünaamiliselt määrata ja hankida ilma getter- või setter-meetodeid otseselt kutsumata.

KVC-d kasutatakse laialdaselt Cocoa sidumistes ja serialiseerimisraamistikes. See tugineb võtmete lahendamiseks täpselt määratletud otsingumustrile ja toetab massiivide ja komplektidega töötamiseks mõeldud kollektsioonioperaatoreid.

Näiteks valueForKey: hangib väärtuse dünaamiliselt, samal ajal kui setValue:forKey: määrab väärtuse. Vale võtme kasutamine võib põhjustada käitusaja erandeid, seega on vaja hoolikat valideerimist.


19) Mis on KVO (võtme-väärtuse jälgimine) ja mille poolest see erineb teavitustest?

Võtme-väärtuse jälgimine (KVO) võimaldab objektidel jälgida teise objekti teatud omaduste muutusi. See on tihedalt seotud KVC-ga ja võimaldab automaatseid teavitusi atribuudi väärtuse muutumisel.

Erinevalt teavitustest on KVO detailne ja omadustepõhine, samas kui teavitused on leviedastusel põhinevad. KVO puhul on krahhide vältimiseks vaja vaatleja eemaldamist, samas kui teavitused on lõdvemalt seotud.

KVO sobib ideaalselt MVC arhitektuuri mudelimuudatuste jälgimiseks, samas kui teavitused sobivad paremini süsteemiüleste sündmuste jaoks.


20) Millised on Objective-C kasutamise eelised ja puudused tänapäeval?

Objective-C pakub dünaamilisi käitusaja funktsioone, küpseid tööriistu ja sügavat integratsiooni Apple'i vanemate raamistikega. See võimaldab paindlikku sõnumite käsitlemist ja seda kasutatakse endiselt laialdaselt suurtes ja küpsetes koodibaasides.

Objective-C-l on aga sõnastav süntaks, järsem õppimiskõver ja see on suures osas asendatud Swift uue arenduse jaoks. Swift pakub paremat ohutust, loetavust ja jõudluse optimeerimist.

Aspekt Eelised Puudused
Runtime Dünaamiline Keeruline
Süntaks Võimas Paljusõnaline
Ökosüsteemi küps Lapsendamise vähenemine

21) Selgitage Objective-C klassi elutsüklit eraldamisest kuni vabastamiseni.

Objective-C objekti elutsükkel algab mälu eraldamisega ja lõpeb vabastamisega. Seda elutsüklit hallatakse peamiselt ARC-i või käsitsi viidete loendamise abil pärandsüsteemides. Protsess algab alloc, mis eraldab objektile mälu ja initsialiseerib selle eksemplari muutujad vaikeväärtustele. Sellele järgneb init, mis valmistab objekti kasutamiseks ette algoleku määramisega.

Pärast initsialiseerimist jääb objekt aktiivseks seni, kuni eksisteerib vähemalt üks tugev viide. Oma eluea jooksul võib objekt vastu võtta sõnumeid, osaleda delegeerimises ja suhelda teiste objektidega. Kui kõik tugevad viited on vabastatud, käivitab ARC automaatselt dealloc, kus teostatakse koristustöid, näiteks vaatlejate eemaldamist või ressursside vabastamist.

Selle elutsükli mõistmine on oluline mälulekete, rippuvate pointerite ja ressursside ebaõige käitlemise vältimiseks.


22) Kuidas sõnumite edastamine Objective-C-s töötab?

Sõnumi edastamine on mitmeastmeline mehhanism, mida kasutatakse siis, kui objekt saab sõnumi, mida ta ei suuda käsitleda. Kohese krahhi asemel pakub Objective-C mitmeid võimalusi meetodi dünaamiliseks lahendamiseks. Esiteks kontrollib käitusaeg +resolveInstanceMethod: et näha, kas meetodit saab dünaamiliselt lisada. Kui see ei lahene, siis jätkatakse -forwardingTargetForSelector: sõnumi teisele objektile ümbersuunamiseks.

Kui see ebaõnnestub, käivitab käituskeskkond -methodSignatureForSelector: ja -forwardInvocation: sõnumi käsitsi edastamiseks. See lubab puhverobjekte, dekoraatoreid ja dünaamilisi käitumisviise.

See mehhanism rõhutab Objective-C paindlikkust ja seda kasutatakse tavaliselt sellistes raamistikes nagu NSProxy ja pilkavates teekides.


23) Mis on säilitamistsüklid ja kuidas neid vältida?

Säilitustsükkel tekib siis, kui kahel või enamal objektil on üksteisele tugevad viited, mis takistab ARC-il neid vabastada. See põhjustab mälulekkeid, isegi kui objekte enam vaja ei ole. Säilitustsükkel esineb tavaliselt ülem- ja alamobjektide, delegaatide ja plokkide vahel, mis jäädvustavad... self.

Säilitustsüklite vältimiseks kasutavad arendajad nõrku viiteid mitteomandisuhete, näiteks delegaatide puhul. Plokkides __weak or __unsafe_unretained viited self kasutatakse tugeva kinnipüüdmise vältimiseks.

Säilitustsüklite tuvastamine Instrumentide abil ja omandi semantika hoolikas kujundamine on Objective-C arendajatele, kes töötavad pikaajaliste rakendustega, kriitilise tähtsusega oskused.


24) Kuidas Objective-C käsitleb samaaegsust ja mitmekeermelisust?

Objective-C pakub samaaegsuse tagamiseks mitut mehhanismi, millest enimkasutatav on Grand Central Dispatch (GCD). GCD võimaldab arendajatel esitada ülesandeid järjekordadesse, mis täidetakse kas järjestikku või samaaegselt. See abstraktselt käsitleb lõimede haldust, parandades jõudlust ja ohutust.

Muud samaaegsuse tööriistad hõlmavad järgmist NSThread, NSOperationja NSOperationQueue. kuigi NSThread pakub madala taseme kontrolli, NSOperationQueue pakub sõltuvuste haldamist, tühistamist ja prioriteetide käsitlemist.

GCD-d eelistatakse üldiselt jõudluskriitilise koodi puhul, samas kui NSOperationQueue sobib keerukate töövoogude jaoks, mis nõuavad täpset kontrolli.


25) Mis on method swizzling ja millal seda kasutada?

Meetodite vahetamine on käitusaegne tehnika, mis võimaldab arendajatel vahetada kahe meetodi implementatsioone. See saavutatakse Objective-C käitusaegsete API-de abil ja võimaldab käitumist muuta ilma alamklasse loomata või algset lähtekoodi muutmata.

Swizzlingut kasutatakse tavaliselt analüütikas, logimises, silumises ja testimise raamistikes. Siiski tuleks seda kasutada ettevaatlikult, kuna see võib põhjustada ootamatut käitumist, muuta silumise keeruliseks ja funktsionaalsuse katki, kui aluseks olevad rakendused muutuvad.

Tootmiskoodis tuleks meetodite muutmine (swizzling) hoolikalt dokumenteerida ja piirduda täpselt määratletud kasutusjuhtudega, et säilitada koodi stabiilsus.


26) Selgitage pealiskaudse ja sügava koopia erinevust Objective-C-s.

Pindkoopia dubleerib konteinerobjekti, kuid mitte selles sisalduvaid objekte. Nii algne kui ka kopeeritud konteiner viitavad samadele alusobjektidele. Seevastu süvakoopia dubleerib nii konteineri kui ka kõik pesastatud objektid, luues sõltumatud koopiad.

Objective-C kollektsiooniklassid teostavad vaikimisi pealiskaudseid koopiaid. Sügavkopeerimine nõuab selgesõnalist rakendamist, sageli kasutades NSCopying või käsitsi iteratsioon.

Kopeerimise tüüp Konteiner kopeeritud Elemendid kopeeritud
Madal Jah Ei
Sügav Jah Jah

Selle erinevuse mõistmine on muudetavate andmestruktuuridega töötamisel oluline, et vältida soovimatuid kõrvalmõjusid.


27) Kuidas toetab Objective-C enesevaatlust?

Objective-C enesevaatlus võimaldab objektidel uurida oma struktuuri ja käitumist käitusajal. See hõlmab klassi kuuluvuse, meetodite saadavuse ja protokollile vastavuse kontrollimist. Meetodid, näiteks isKindOfClass:, respondsToSelector:ja conformsToProtocol: kasutatakse tavaliselt.

Introspektsioon võimaldab kaitsvat programmeerimist ja dünaamilist käitumise kohandamist. Näiteks saab objekt enne meetodi kutsumist kontrollida, kas teine ​​objekt rakendab seda, parandades seeläbi tööaja ohutust.

See võimekus on eriti kasulik lõdvalt seotud süsteemides ja pluginapõhistes arhitektuurides.


28) Mis vahe on isEqual: ja == vahel Objective-C-s?

. == operaator võrdleb mäluaadresse, määrates kindlaks, kas kaks viidet osutavad samale objektile. isEqual: meetod võrdleb objektide sisu või loogilist võrdsust.

Näiteks võivad kaks sama tekstisisuga erinevat stringiobjekti tagastada NO võrreldes kasutades ==, Kuid YES võrreldes kasutades isEqual:. Palju Foundation klasside tühistamine isEqual: pakkuda sisukaid võrdõiguslikkuse võrdlusi.

Õige võrdlusmeetodi valimine on oluline loogikavigade vältimiseks, eriti selliste kogumike nagu komplektid ja sõnaraamatud puhul.


29) Kuidas Objective-C integreerub C-ga ja C++ kood?

Objective-C on täielikult C-ga ühilduv ja suudab teistega koostalitlusvõimelised olla. C++ läbi objektiivseC++. Kasutades .mm failide puhul saavad arendajad kombineerida Objective-C ja C++ kood samas lähtekoodifailis.

See integratsioon võimaldab olemasoleva C ja C++ teeke, kasutades samal ajal ära Objective-C objektorienteeritud funktsioone. Arendajad peavad nimede moonutamist ja objektide elutsükleid hoolikalt haldama, et vältida mälu- ja ühilduvusprobleeme.

Eesmärk-C++ kasutatakse tavaliselt jõudluskriitilistes rakendustes, näiteks mängumootorites ja multimeedia töötlemisel.


30) Millal peaksite valima Objective-C asemel Swift tänapäevases arengus?

Objective-C on endiselt sobiv valik suurte pärandkoodibaaside haldamisel, vanemate raamistikega integreerimisel või täiustatud käitusaja funktsioonide nõudmisel, mis pole hõlpsasti saavutatavad. SwiftSelle dünaamiline sõnumsidesüsteem ja küps tööriistariba muudavad selle sobivaks teatud madala taseme või raamistikule orienteeritud arendusülesannete jaoks.

Uute projektide puhul aga Swift on üldiselt eelistatud parema ohutuse, loetavuse ja jõudluse tõttu. Otsus peaks põhinema projekti nõuetel, meeskonna asjatundlikkusel ja pikaajalisel hooldatavusel.

Objective-C hea mõistmine on jätkuvalt väärtuslik, eriti ettevõtetes, kus on ulatuslikud olemasolevad Objective-C rakendused.


🔍 Parimad Objective-C intervjuuküsimused koos reaalsete stsenaariumide ja strateegiliste vastustega

1) Millised on Objective-C ja ... peamised erinevused? Swiftja millal sa ikkagi valiksid Objective-C?

Kandidaadilt oodatakse: Intervjueerija soovib hinnata teie arusaamist keeleökosüsteemist ja teie võimet teha teadlikke arhitektuurilisi otsuseid.

Näite vastus: Objective-C on dünaamiline, sõnumipõhine keel, millel on tugevad käitusaja võimalused, samas kui Swift rõhutab ohutust, jõudlust ja kaasaegset süntaksit. Suure pärandi iOS-i või muu haldamisel või laiendamisel valiksin ikkagi Objective-C. macOS koodibaasid, kus ümberkirjutamine toimub Swift tooks kaasa tarbetuid riske või kulusid.


2) Kuidas töötab mäluhaldus Objective-C-s ARC all?

Kandidaadilt oodatakse: Intervjueerija kontrollib teie arusaamist mäluhalduse põhitõdedest ja sellest, kuidas ARC neid lihtsustab.

Näite vastus: ARC-i puhul lisab kompilaator kompileerimise ajal automaatselt säilitamis- ja vabastamiskäsud. Arendajad peavad siiski vältima tugevaid viitetsükleid, kasutades nõrku või määrates viiteid sobivalt, eriti delegeeritud mustrite ja plokkide kasutamisel.


3) Kas saate selgitada tugevate, nõrkade ja omistavate omaduste erinevust?

Kandidaadilt oodatakse: Intervjueerija soovib veenduda, et sa mõistad objekti omandiõigust ja elutsükli haldust.

Näite vastus: Tugevad omadused suurendavad säilitamiste arvu ja hoiavad objekti elus. Nõrgad omadused ei säilita objekti ja nende väärtuseks määratakse null, kui objekti eraldamine vabastatakse. Assign (määra) kasutatakse tavaliselt primitiivsete tüüpide puhul ja see ei halda objekti omandiõigust.


4) Kirjeldage olukorda, kus te Objective-C rakenduses keerulist krahhi silusite.

Kandidaadilt oodatakse: Intervjueerija hindab teie probleemide lahendamise lähenemisviisi ja veaotsingu oskusi.

Näite vastus: Eelmises rollis silusin korduvat krahhi, mille põhjustasid mitmelõimelises keskkonnas liiga palju avaldatud objektid. Kasutasin deallocationi jälgimiseks Instrumente, millel olid lubatud zombid, ja tuvastasin vale atribuudi, mis pärast parandamist probleemi lahendas.


5) Mille poolest erinevad kategooriad Objective-C alamklassidest?

Kandidaadilt oodatakse: Intervjueerija soovib hinnata teie arusaamist koodi korraldusest ja laiendatavusest.

Näite vastus: Kategooriad võimaldavad olemasolevale klassile meetodeid lisada ilma alamklassideks jagamiseta, mis on kasulik funktsionaalsuse modulariseerimiseks. Alamklassid loovad uusi klassihierarhiaid ja saavad käitumist alistada, kuid suurendavad sidumist ja keerukust.


6) Mis on Objective-C plokid ja kuidas neid tavaliselt kasutatakse?

Kandidaadilt oodatakse: Intervjueerija kontrollib teie tuttavust kaasaegsete Objective-C mustritega.

Näite vastus: Plokid on sulgemised, mis kapseldavad koodi ja hõivatud muutujaid. Neid kasutatakse tavaliselt asünkroonsete tagasihelistuste, lõpuleviimise käitlejate ja loendamise jaoks. Tuleb olla ettevaatlik, et vältida säilitustsüklit, kasutades nõrku viiteid iseendale.


7) Kuidas käsitleksite Objective-C-s lõimestamist ja samaaegsust?

Kandidaadilt oodatakse: Intervjueerija tahab teada, kuidas te tagate tulemuslikkuse ja reageerimisvõime.

Näite vastus: Eelmisel ametikohal tuginesin taustaülesannete ja kasutajaliidese värskenduste haldamisel suuresti Grand Central Dispatchile. Andmete järjepidevuse tagamiseks kasutasin jadajärjekordi ja jõudluskriitiliste toimingute jaoks samaaegseid järjekordi.


8) Selgitage delegeerimismustrit ja selle eeliseid.

Kandidaadilt oodatakse: Intervjueerija testib teie arusaamist iOS-i arenduses levinud disainimustritest.

Näite vastus: Delegeerimismuster võimaldab ühel objektil edastada sündmusi või andmeid teisele ilma tiheda seoseta. See soodustab murede eraldamist ning muudab koodi testimise ja haldamise lihtsamaks.


9) Kirjeldage, kuidas te refaktoreeriksite suurt, pärandlikku Objective-C koodibaasi.

Kandidaadilt oodatakse: Intervjueerija hindab teie strateegilist mõtlemist ja kogemust pärandsüsteemidega.

Näite vastus: Eelmises rollis lähenesin refaktoreerimisele järkjärgulisele lähenemisele, lisades esmalt ühiktestid, isoleerides kriitilised komponendid ja parandades koodi loetavust. Vältisin suuri ümberkirjutusi ja keskendusin tehnilise võla ohutule vähendamisele aja jooksul.


10) Kuidas tagate Objective-C projektides koodi kvaliteedi ja hooldatavuse?

Kandidaadilt oodatakse: Intervjueerija soovib saada ülevaadet teie inseneridistsipliinist ja meeskonnatööst.

Näite vastus: Eelmisel töökohal rõhutasin järjepidevaid kodeerimisstandardeid, põhjalikku koodi ülevaatamist ja dokumenteerimist. Samuti julgustasin kirjutama korduvkasutatavaid komponente ja kasutama staatiliste analüüside tööriistu probleemide varajaseks avastamiseks.

Võta see postitus kokku järgmiselt: