30 Pertanyaan dan Jawaban Wawancara Objective-C Teratas (2026)

Mempersiapkan diri untuk peran yang membutuhkan kemampuan penalaran berbasis Objective-C berarti mengantisipasi apa yang akan ditanyakan pewawancara di luar sintaksis dan model memori. Wawancara Objective-C mengungkap kedalaman penalaran, penilaian desain, dan pemahaman praktis melalui pertanyaan-pertanyaan yang terarah secara konsisten.
Pertanyaan-pertanyaan ini membuka jalan bagi para pemula, insinyur tingkat menengah, dan senior, yang mencerminkan tren industri dan implementasi nyata. Para pemberi kerja menghargai keahlian teknis, analisis, dan perumusan masalah dari para profesional dengan pengalaman langsung, yang berkolaborasi dengan pemimpin tim dan manajer untuk menerapkan keterampilan Objective-C di lingkungan produksi. Perspektif ini mendukung pertumbuhan di berbagai tahapan karier. Baca lebih banyakโฆ
๐ Unduh PDF Gratis: Pertanyaan & Jawaban Wawancara Objective-C
Pertanyaan dan Jawaban Wawancara Objective-C Terpopuler
1) Apa itu Objective-C dan mengapa digunakan?
Objective-C adalah sebuah superset ketat dari bahasa pemrograman C yang menambahkan kemampuan berorientasi objek dan runtime dinamis. Bahasa ini awalnya dikembangkan pada awal tahun 1980-an dan merupakan bahasa utama yang digunakan untuk macOS dan pengembangan aplikasi iOS sebelumnya SwiftBahasa ini mewarisi sintaks dari C tetapi menggunakan sistem pengiriman pesan ala Smalltalk untuk objek, yang memungkinkan pemanggilan metode secara dinamis saat runtime.
Objective-C digunakan untuk pengembanganping aplikasi asli di platform Apple karena terintegrasi erat dengan kerangka kerja Apple seperti Foundation dan Cocoa/Cocoa Touch. Ini memungkinkan pengembang untuk membangun aplikasi dengan akses penuh ke API sistem dan komponen UI yang kaya.
Contoh:
#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) Jelaskan struktur dasar program Objective-C.
Program Objective-C biasanya terdiri dari:
- Perintah preprocessor (Seperti
#import) - Antarmuka (
@interface) โ mendefinisikan kelas dan metode/properti publiknya - Organisasi (
@implementation) โ berisi definisi metode - metode โ fungsi yang terkait dengan objek
- Variabel ke Ekspresi & Pernyataan โ logika kode
- komentar untuk menjelaskan logika kode
Struktur ini memisahkan antarmuka dari implementasi secara jelas, membantuping Memodularisasi kode.
3) Apa itu protokol dalam Objective-C dan apa saja jenisnya?
Dalam Objective-C, sebuah protokol Ini mirip dengan antarmuka dalam bahasa pemrograman lain. Ini mendefinisikan sekumpulan metode yang dapat diadopsi dan diimplementasikan oleh kelas mana pun, memungkinkan pewarisan berganda dari tanda tangan metode (bukan implementasi).
Ada dua jenis:
- Protokol Formal โ Dideklarasikan menggunakan
@protocol; dapat mendefinisikan wajib ke opsional metode. - Protokol Informal โ Biasanya diimplementasikan sebagai kategori pada
NSObject; opsional sesuai desain.
Gunakan Kasus: Pola delegasi di UIKit sering menggunakan protokol (misalnya, UITableViewDelegate).
4) Apa perbedaan antara #import dan #include?
#includeadalah arahan praprosesor C yang menyisipkan isi satu file ke file lain, yang dapat menyebabkan masalah inklusi ganda.#importadalah sebuah arahan Objective-C yang memastikan bahwa sebuah file hanya disertakan sekali, menghindari duplikasi.
Demikian, #import lebih aman dan lebih disukai dalam pengembangan Objective-C.
5) Apa kegunaan kategori dalam Objective-C?
Kategori memperluas kelas yang sudah ada dengan menambahkan metode tanpa membuat subkelas atau memodifikasi kode asli. Fitur ini memungkinkan Anda untuk memisahkan metode secara logis ke dalam beberapa kelompok atau menambahkan perilaku tambahan pada kelas kerangka kerja seperti... NSString.
Contoh Penggunaan: Menambahkan metode utilitas ke NSArray tanpa membuat subkelas:
@interface NSArray (Utility) - (NSArray *)reversedArray; @end
6) Apa fungsi @synthesize?
The @synthesize arahan tersebut memberitahu kompiler untuk menghasilkan metode getter dan setter. untuk properti yang dinyatakan dengan @propertyHal ini memperkuat enkapsulasi dan mengotomatiskan kode berulang.
Sejak Xcode 4.4, sintesis otomatis adalah default โ Anda seringkali tidak perlu menulis @synthesize secara eksplisit.
7) Jelaskan manajemen memori dalam Objective-C.
Objective-C menggunakan Penghitungan Referensi Otomatis (ARC) untuk mengelola memori. ARC menambahkan panggilan retain/release yang dihasilkan oleh kompiler yang memastikan objek tetap aktif selama dibutuhkan dan Dibatalkan alokasinya ketika tidak ada referensi yang tersisa..
Konsep utama:
- Referensi yang kuat menjaga agar objek tetap hidup
- Referensi lemah Jangan menyimpan objek, hindari siklus penyimpanan.
Contoh:
@property (strong, nonatomic) NSString *name; @property (weak, nonatomic) id delegate;
8) Apa perbedaan antara NSArray dan NSMutableArray?
- NSArray: Array yang tidak dapat diubah โ isinya tidak dapat diubah setelah dibuat.
- NSMutableArray: Array yang dapat diubah โ memungkinkan penambahan, penghapusan, atau penggantian elemen.
Contoh:
NSMutableArray *list = [NSMutableArray arrayWithObjects:@"A", @"B", nil]; [list addObject:@"C"]; // Allowed
9) Apa itu enkapsulasi data dalam Objective-C?
Enkapsulasi data mengikat data dan fungsi-fungsi yang beroperasi padanya ke dalam suatu struktur. unit tunggal (kelas) sekaligus membatasi akses langsung dari luar kelas. Hal ini menegakkan modularitas, perlindungan data, dan abstain.traction.
10) Bagaimana cara kerja pemanggilan metode di Objective-C?
Objective-C menggunakan pesan lewat sintaksis:
[object methodName];
Di sini, object menerima pesan untuk memanggil methodNameJika metode tersebut tidak terselesaikan, runtime akan menangani penerusan atau melempar pengecualian. Fleksibilitas ini merupakan fitur andal dari runtime dinamis Objective-C.
11) Jelaskan perbedaan antara properti strong, weak, assign, dan copy dalam Objective-C.
Properti Objective-C menentukan bagaimana memori dikelola untuk referensi objek, dan memilih atribut yang tepat sangat penting untuk stabilitas aplikasi. strong Atribut ini meningkatkan jumlah referensi suatu objek, memastikan objek tersebut tetap berada di memori selama properti tersebut ada. Atribut ini umumnya digunakan untuk hubungan kepemilikan. weak atribut tidak mempertahankan objek, secara otomatis mengatur referensi ke nil ketika objek tersebut dibebaskan, yang membantu mencegah siklus retensi, terutama dalam pola delegasi.
The assign Atribut ini digunakan untuk tipe data primitif seperti bilangan bulat dan bilangan pecahan. Atribut ini tidak mempertahankan objek dan tidak boleh digunakan untuk objek Objective-C di bawah ARC. Atribut salin membuat sebuah copy dari objek yang ditugaskan, yang sangat penting untuk objek yang dapat diubah seperti NSMutableString untuk mencegah modifikasi yang tidak disengaja.
| Atribut | Mempertahankan Objek | Use Case |
|---|---|---|
| kuat | Ya | Kepemilikan |
| lemah | Tidak | Delegasi |
| menetapkan | Tidak | Primitif |
| salinan | Salinan | Keamanan yang tak berubah |
12) Bagaimana cara kerja Penghitungan Referensi Otomatis (ARC) secara internal?
Automatic Reference Counting (ARC) adalah sistem manajemen memori pada waktu kompilasi yang secara otomatis menyisipkan panggilan retain, release, dan autorelease. Tidak seperti garbage collection, ARC tidak berjalan pada waktu runtime; sebaliknya, compiler menganalisis siklus hidup objek dan menentukan di mana panggilan manajemen memori diperlukan. Hal ini memastikan penggunaan memori yang efisien tanpa intervensi pengembang.
ARC tracARC menyimpan referensi kuat ke objek dan melepaskannya ketika tidak ada referensi kuat yang tersisa. Referensi lemah secara otomatis dinolkan ketika objek dilepaskan, sehingga meningkatkan keamanan aplikasi. ARC tidak mengelola Core. Foundation objek secara otomatis, sehingga teknik penghubung seperti __bridge ke __bridge_transfer diperlukan.
Sebagai contoh, siklus referensi masih dapat terjadi jika dua objek saling mereferensikan secara kuat, yang harus diselesaikan menggunakan referensi lemah.
13) Apa itu runtime Objective-C, dan mengapa itu penting?
Runtime Objective-C adalah sistem yang ampuh yang memungkinkan perilaku dinamis dalam program Objective-C. Sistem ini memungkinkan metode untuk diselesaikan pada saat runtime, bukan pada saat kompilasi, sehingga memungkinkan fitur-fitur seperti pengiriman metode dinamis, penerusan pesan, dan introspeksi.
Runtime ini memungkinkan Objective-C untuk menentukan metode mana yang akan dipanggil hanya ketika sebuah pesan dikirim. Jika metode tersebut tidak ada, runtime menyediakan beberapa kesempatan untuk menanganinya, seperti meneruskan pesan ke objek lain. Hal ini membuat Objective-C sangat fleksibel dan mudah diperluas.
Fungsi runtime juga memungkinkan pengembang untuk memeriksa hierarki kelas, menambahkan metode secara dinamis, dan mengubah implementasi metode, yang umum digunakan dalam kerangka kerja debugging dan analitik.
14) Apa itu blok dalam Objective-C, dan apa manfaatnya?
Blok dalam Objective-C adalah closure yang membungkus kode dan variabel untuk dieksekusi di kemudian hari. Blok mirip dengan ekspresi lambda dalam bahasa pemrograman lain dan umumnya digunakan untuk callback, eksekusi asinkron, dan enumerasi.
Blok menangkap variabel dari cakupan sekitarnya, yang dapat dimodifikasi menggunakan __block kata kunci. Mereka menyederhanakan keterbacaan kode dan mengurangi kebutuhan akan pola delegasi dalam banyak skenario.
Manfaat penggunaan blok meliputi peningkatan lokalisasi kode, keterbacaan yang lebih baik, dan kemudahan pemrograman asinkron. Namun, pengembang harus berhati-hati terhadap siklus retensi ketika blok melakukan penangkapan yang kuat. self. Menggunakan __weak Referensi di dalam blok mencegah kebocoran memori.
15) Apa perbedaan antara nil dan NULL dalam Objective-C?
Dalam Objective-C, nil mewakili penunjuk objek null, sedangkan NULL mewakili pointer null untuk tipe data C. Meskipun seringkali dievaluasi ke nilai yang sama (nol), keduanya berbeda secara semantik dan harus digunakan dengan tepat.
nil digunakan untuk objek Objective-C dan memungkinkan pesan dikirim dengan aman tanpa menyebabkan aplikasi mengalami crash. Ketika pesan dikirim ke nil, itu hanya mengembalikan nol atau nilSebaliknya, dereferensi sebuah NULL Penggunaan pointer dalam bahasa C dapat mengakibatkan perilaku yang tidak terdefinisi dan seringkali menyebabkan aplikasi mengalami crash.
Menggunakan nil meningkatkan keamanan dan keterbacaan kode saat berurusan dengan objek Objective-C, sementara NULL Seharusnya dikhususkan untuk struktur C dan pointer.
16) Jelaskan delegasi dalam Objective-C dengan sebuah contoh.
Delegasi adalah pola desain dalam Objective-C yang memungkinkan satu objek untuk mengkomunikasikan peristiwa atau keputusan ke objek lain. Implementasinya menggunakan protokol dan referensi lemah untuk menghindari siklus retensi. Delegasi mendorong kopling longgar dan penggunaan kembali.
Objek pendelegasi mendefinisikan sebuah protokol, dan objek delegasi mengadopsi serta mengimplementasikan protokol tersebut. Objek pendelegasi kemudian memanggil metode pada delegasinya ketika peristiwa tertentu terjadi.
Sebagai contoh, tampilan tabel memberi tahu delegasinya ketika sebuah baris dipilih. Desain ini memungkinkan perilaku untuk disesuaikan tanpa perlu membuat subkelas dan banyak digunakan di seluruh kerangka kerja Apple.
17) Apa perbedaan antara kategori dan ekstensi dalam Objective-C?
Baik kategori maupun ekstensi memungkinkan pengembang untuk menambahkan fungsionalitas ke kelas yang sudah ada, tetapi keduanya memiliki tujuan yang berbeda. Kategori menambahkan metode publik ke suatu kelas dan sering digunakan untuk mengatur kode atau menambahkan metode utilitas. Ekstensi, juga dikenal sebagai ekstensi kelas, biasanya dideklarasikan dalam file implementasi dan memungkinkan penambahan properti dan metode privat.
Kategori tidak dapat menambahkan variabel instance, sedangkan ekstensi dapat. Kategori sering digunakan untuk meningkatkan kelas kerangka kerja, sedangkan ekstensi digunakan untuk enkapsulasi dan detail implementasi internal.
Memahami perbedaan tersebut memastikan desain kelas yang lebih baik dan peningkatan kemudahan pemeliharaan.
18) Bagaimana cara kerja KVC (Key-Value Coding) di Objective-C?
Key-Value Coding (KVC) memungkinkan akses tidak langsung ke properti suatu objek menggunakan kunci string. Ini memungkinkan pengaturan dan pengambilan nilai secara dinamis tanpa memanggil metode getter atau setter secara eksplisit.
KVC banyak digunakan dalam binding Cocoa dan kerangka kerja serialisasi. Ia bergantung pada pola pencarian yang terdefinisi dengan baik untuk menyelesaikan kunci dan mendukung operator koleksi untuk bekerja dengan array dan set.
Sebagai contoh, valueForKey: mengambil nilai secara dinamis, sementara setValue:forKey: Menetapkan sebuah nilai. Penggunaan kunci yang salah dapat mengakibatkan pengecualian saat runtime, sehingga diperlukan validasi yang cermat.
19) Apa itu KVO (Key-Value Observing), dan apa perbedaannya dengan notifikasi?
Key-Value Observing (KVO) memungkinkan objek untuk mengamati perubahan pada properti tertentu dari objek lain. KVO terkait erat dengan KVC dan memungkinkan notifikasi otomatis ketika nilai properti berubah.
Berbeda dengan notifikasi, KVO bersifat terperinci dan spesifik terhadap properti, sedangkan notifikasi berbasis siaran. KVO memerlukan penghapusan pengamat yang tepat untuk menghindari kerusakan, sedangkan notifikasi lebih longgar keterkaitannya.
KVO ideal untuk mengamati perubahan model dalam arsitektur MVC, sedangkan notifikasi lebih cocok untuk peristiwa di seluruh sistem.
20) Apa saja kelebihan dan kekurangan menggunakan Objective-C saat ini?
Objective-C menawarkan fitur runtime yang dinamis, perangkat bantu yang matang, dan integrasi yang mendalam dengan kerangka kerja Apple lama. Bahasa ini memungkinkan penanganan pesan yang fleksibel dan masih banyak digunakan dalam basis kode yang besar dan matang.
Namun, Objective-C memiliki sintaks yang bertele-tele, kurva pembelajaran yang lebih curam, dan sebagian besar telah digantikan oleh Swift untuk pengembangan baru. Swift Memberikan peningkatan keamanan, keterbacaan, dan optimalisasi kinerja.
| Aspek | Kelebihan | Kekurangan |
|---|---|---|
| Runtime | Dinamis | Kompleks |
| Sintaksis | kuasa | Bertele-tele |
| Ekosistem | Dewasa | Penurunan adopsi |
21) Jelaskan siklus hidup kelas Objective-C dari alokasi hingga deallokasi.
Siklus hidup objek Objective-C dimulai dengan alokasi memori dan berakhir dengan dealokasi. Siklus hidup ini dikelola terutama melalui ARC atau penghitungan referensi manual pada sistem lama. Proses dimulai dengan alloc, yang mengalokasikan memori untuk objek dan menginisialisasi variabel instansnya ke nilai default. Ini diikuti oleh init, yang mempersiapkan objek untuk digunakan dengan mengatur keadaan awal.
Setelah diinisialisasi, objek tetap hidup selama setidaknya satu referensi kuat ada. Selama masa hidupnya, objek dapat menerima pesan, berpartisipasi dalam delegasi, dan berinteraksi dengan objek lain. Ketika semua referensi kuat dilepaskan, ARC secara otomatis memanggil dealloc, di mana tugas pembersihan seperti menghapus pengamat atau membebaskan sumber daya dilakukan.
Memahami siklus hidup ini sangat penting untuk menghindari kebocoran memori, pointer yang mengarah ke memori yang tidak valid (dangling pointer), dan penanganan sumber daya yang tidak tepat.
22) Bagaimana cara kerja penerusan pesan di Objective-C?
Penerusan pesan adalah mekanisme multi-langkah yang digunakan ketika suatu objek menerima pesan yang tidak dapat ditanganinya. Alih-alih langsung mengalami crash, Objective-C menyediakan beberapa kesempatan untuk menyelesaikan metode tersebut secara dinamis. Pertama, pemeriksaan runtime... +resolveInstanceMethod: untuk melihat apakah metode tersebut dapat ditambahkan secara dinamis. Jika tidak teratasi, proses berlanjut ke -forwardingTargetForSelector: untuk mengalihkan pesan ke objek lain.
Jika itu gagal, runtime akan memanggil -methodSignatureForSelector: ke -forwardInvocation: untuk meneruskan pesan secara manual. Ini memungkinkan objek proxy, decorator, dan perilaku dinamis.
Mekanisme ini menyoroti fleksibilitas Objective-C dan umum digunakan dalam kerangka kerja seperti NSProxy dan pustaka mocking.
23) Apa itu siklus retensi, dan bagaimana cara mencegahnya?
Siklus retensi terjadi ketika dua atau lebih objek memegang referensi kuat satu sama lain, mencegah ARC untuk melepaskan alokasinya. Hal ini mengakibatkan kebocoran memori, meskipun objek-objek tersebut tidak lagi dibutuhkan. Siklus retensi umumnya terjadi antara objek induk dan anak, delegasi, dan blok yang menangkap self.
Untuk mencegah siklus retensi, pengembang menggunakan referensi lemah untuk hubungan non-kepemilikan, seperti delegasi. Dalam blok, __weak or __unsafe_unretained referensi ke self digunakan untuk menghindari penangkapan yang kuat.
Mengidentifikasi siklus retensi menggunakan Instruments dan merancang semantik kepemilikan dengan cermat adalah keterampilan penting bagi pengembang Objective-C yang mengerjakan aplikasi yang berjalan lama.
24) Bagaimana Objective-C menangani konkurensi dan multithreading?
Objective-C menyediakan berbagai mekanisme untuk konkurensi, dengan Grand Central Dispatch (GCD) sebagai yang paling banyak digunakan. GCD memungkinkan pengembang untuk mengirimkan tugas ke antrian yang dieksekusi secara serial atau bersamaan.tracManajemen thread TS, meningkatkan kinerja dan keamanan.
Alat konkurensi lainnya meliputi: NSThread, NSOperation, dan NSOperationQueue. Sementara NSThread menawarkan kontrol tingkat rendah, NSOperationQueue menyediakan manajemen ketergantungan, pembatalan, dan penanganan prioritas.
GCD umumnya lebih disukai untuk kode yang kritis terhadap performa, sedangkan NSOperationQueue Cocok untuk alur kerja kompleks yang membutuhkan kontrol yang sangat detail.
25) Apa itu method swizzling, dan kapan metode ini harus digunakan?
Method swizzling adalah teknik runtime yang memungkinkan pengembang untuk menukar implementasi dari dua metode. Hal ini dicapai dengan menggunakan API runtime Objective-C dan memungkinkan modifikasi perilaku tanpa membuat subclass atau memodifikasi kode sumber asli.
Swizzling umumnya digunakan dalam kerangka kerja analitik, pencatatan log, debugging, dan pengujian. Namun, penggunaannya harus hati-hati karena dapat menimbulkan perilaku yang tidak terduga, mempersulit proses debugging, dan merusak fungsionalitas jika implementasi yang mendasarinya berubah.
Dalam kode produksi, penggunaan metode yang berbeda (method swizzling) harus didokumentasikan dengan cermat dan dibatasi pada kasus penggunaan yang terdefinisi dengan baik untuk menjaga stabilitas kode.
26) Jelaskan perbedaan antara shallow copy dan deep copy dalam Objective-C.
Salinan dangkal (shallow copy) menduplikasi objek kontainer tetapi tidak objek-objek yang dikandungnya. Baik kontainer asli maupun yang disalin merujuk pada objek-objek yang mendasarinya yang sama. Sebaliknya, salinan mendalam (deep copy) menduplikasi baik kontainer maupun semua objek bersarang, menciptakan salinan independen.
Kelas koleksi Objective-C biasanya melakukan penyalinan dangkal (shallow copy) secara default. Penyalinan mendalam (deep copy) memerlukan implementasi eksplisit, seringkali menggunakan NSCopying atau iterasi manual.
| Jenis Salin | Kontainer Disalin | Elemen yang Disalin |
|---|---|---|
| Dangkal | Ya | Tidak |
| Dalam | Ya | Ya |
Memahami perbedaan ini sangat penting ketika bekerja dengan struktur data yang dapat diubah untuk menghindari efek samping yang tidak diinginkan.
27) Bagaimana Objective-C mendukung introspeksi?
Introspeksi dalam Objective-C memungkinkan objek untuk memeriksa struktur dan perilakunya sendiri saat runtime. Ini termasuk memeriksa keanggotaan kelas, ketersediaan metode, dan kesesuaian protokol. Metode seperti... isKindOfClass:, respondsToSelector:, dan conformsToProtocol: umumnya digunakan.
Introspeksi memungkinkan pemrograman defensif dan adaptasi perilaku dinamis. Misalnya, sebuah objek dapat memeriksa apakah objek lain mengimplementasikan suatu metode sebelum memanggilnya, sehingga meningkatkan keamanan saat runtime.
Kemampuan ini sangat berguna terutama pada sistem yang terhubung secara longgar dan arsitektur berbasis plugin.
28) Apa perbedaan antara isEqual: dan == dalam Objective-C?
The == Operator ini membandingkan alamat memori, menentukan apakah dua referensi menunjuk ke objek yang sama. isEqual: Metode ini membandingkan isi atau kesamaan logis dari objek-objek tersebut.
Sebagai contoh, dua objek string berbeda dengan konten teks yang sama mungkin menghasilkan nilai yang berbeda. NO bila dibandingkan menggunakan ==, tapi YES bila dibandingkan menggunakan isEqual:. Banyak Foundation kelas menimpa isEqual: untuk memberikan perbandingan kesetaraan yang bermakna.
Memilih metode perbandingan yang tepat sangat penting untuk menghindari kesalahan logika, terutama saat bekerja dengan koleksi seperti himpunan dan kamus.
29) Bagaimana Objective-C terintegrasi dengan C dan C++ kode?
Objective-C sepenuhnya kompatibel dengan C dan dapat beroperasi bersama dengan C++ melalui Tujuan-C++. Dengan menggunakan .mm file, pengembang dapat mencampur Objective-C dan C++ kode dalam file sumber yang sama.
Integrasi ini memungkinkan penggunaan kembali kode C yang sudah ada dan C++ Pustaka-pustaka tersebut tetap dapat memanfaatkan fitur berorientasi objek dari Objective-C. Pengembang harus mengelola pengubahan nama (name mangling) dan siklus hidup objek dengan hati-hati untuk menghindari masalah memori dan kompatibilitas.
Objektif-C++ Umumnya digunakan dalam aplikasi yang membutuhkan performa tinggi, seperti mesin game dan pemrosesan multimedia.
30) Kapan Anda harus memilih Objective-C daripada Swift dalam pembangunan modern?
Objective-C masih merupakan pilihan yang tepat ketika memelihara basis kode lama yang besar, berintegrasi dengan kerangka kerja yang lebih tua, atau membutuhkan fitur runtime tingkat lanjut yang tidak mudah dicapai di SwiftSistem perpesanan dinamis dan perangkat pendukung yang matang membuatnya cocok untuk tugas pengembangan tingkat rendah atau berorientasi kerangka kerja tertentu.
Namun, untuk proyek-proyek baru, Swift Secara umum lebih disukai karena meningkatkan keamanan, keterbacaan, dan kinerja. Keputusan harus didasarkan pada persyaratan proyek, keahlian tim, dan pemeliharaan jangka panjang.
Pemahaman yang kuat tentang Objective-C tetap berharga, terutama di perusahaan dengan aplikasi Objective-C yang sudah ada secara ekstensif.
๐ Pertanyaan Wawancara Objective-C Teratas dengan Skenario Dunia Nyata & Jawaban Strategis
1) Apa perbedaan utama antara Objective-C dan Swift, dan kapan Anda masih akan memilih Objective-C?
Diharapkan dari kandidat: Pewawancara ingin menilai pemahaman Anda tentang ekosistem bahasa pemrograman dan kemampuan Anda untuk membuat keputusan arsitektur yang tepat.
Contoh jawaban: Objective-C adalah bahasa pemrograman dinamis berbasis pesan dengan kemampuan runtime yang kuat, sedangkan Swift menekankan keamanan, kinerja, dan sintaks modern. Saya tetap akan memilih Objective-C saat memelihara atau memperluas aplikasi iOS lama yang besar atau macOS basis kode tempat penulisan ulang di Swift akan menimbulkan risiko atau biaya yang tidak perlu.
2) Bagaimana cara kerja manajemen memori di Objective-C di bawah ARC?
Diharapkan dari kandidat: Pewawancara sedang menguji pemahaman Anda tentang dasar-dasar manajemen memori dan bagaimana ARC menyederhanakannya.
Contoh jawaban: Di bawah ARC, kompiler secara otomatis menyisipkan panggilan retain dan release pada waktu kompilasi. Pengembang tetap perlu menghindari siklus referensi kuat dengan menggunakan referensi lemah atau referensi assign secara tepat, terutama dalam pola delegate dan penggunaan blok.
3) Dapatkah Anda menjelaskan perbedaan antara sifat kuat, lemah, dan sifat yang ditetapkan?
Diharapkan dari kandidat: Pewawancara ingin memastikan Anda memahami kepemilikan objek dan manajemen siklus hidup.
Contoh jawaban: Properti kuat meningkatkan jumlah referensi dan menjaga objek tetap aktif. Properti lemah tidak mempertahankan objek dan akan diatur ke nil ketika objek dibebaskan. Metode `assign` biasanya digunakan untuk tipe data primitif dan tidak mengelola kepemilikan objek.
4) Jelaskan pengalaman Anda saat melakukan debugging terhadap aplikasi Objective-C yang mengalami crash yang cukup sulit.
Diharapkan dari kandidat: Pewawancara sedang mengevaluasi pendekatan pemecahan masalah dan keterampilan debugging Anda.
Contoh jawaban: Dalam peran saya sebelumnya, saya melakukan debugging terhadap crash berulang yang disebabkan oleh objek yang dilepaskan secara berlebihan di lingkungan multithread. Saya menggunakan Instruments dengan Zombies diaktifkan untuk trace. proses deallokasi dan mengidentifikasi atribut properti yang salah, yang menyelesaikan masalah setelah diperbaiki.
5) Apa perbedaan antara kategori dan subkelas dalam Objective-C?
Diharapkan dari kandidat: Pewawancara ingin menilai pemahaman Anda tentang pengorganisasian dan ekstensibilitas kode.
Contoh jawaban: Kategori memungkinkan penambahan metode ke kelas yang sudah ada tanpa perlu membuat subkelas, yang berguna untuk memodularisasi fungsionalitas. Subkelas menciptakan hierarki kelas baru dan dapat menimpa perilaku, tetapi meningkatkan ketergantungan dan kompleksitas.
6) Apa itu blok dalam Objective-C, dan bagaimana cara penggunaannya secara umum?
Diharapkan dari kandidat: Pewawancara sedang memeriksa pemahaman Anda tentang pola Objective-C modern.
Contoh jawaban: Blok adalah penutupan (closure) yang membungkus kode dan variabel yang ditangkap. Blok umumnya digunakan untuk panggilan balik asinkron, penanganan penyelesaian (completion handler), dan enumerasi. Perhatian harus diberikan untuk menghindari siklus retensi dengan menggunakan referensi lemah ke diri sendiri (self).
7) Bagaimana Anda akan menangani threading dan konkurensi di Objective-C?
Diharapkan dari kandidat: Pewawancara ingin mengetahui bagaimana Anda memastikan kinerja dan daya tanggap.
Contoh jawaban: Di posisi sebelumnya, saya sangat bergantung pada Grand Central Dispatch untuk mengelola tugas latar belakang dan pembaruan UI. Saya menggunakan antrian serial untuk konsistensi data dan antrian konkuren untuk operasi yang kritis terhadap kinerja.
8) Jelaskan pola delegasi dan keuntungannya.
Diharapkan dari kandidat: Pewawancara sedang menguji pemahaman Anda tentang pola desain umum dalam pengembangan iOS.
Contoh jawaban: Pola delegate memungkinkan satu objek untuk mengkomunikasikan peristiwa atau data kembali ke objek lain tanpa keterkaitan yang erat. Ini mendorong pemisahan tanggung jawab dan membuat kode lebih mudah diuji dan dipelihara.
9) Jelaskan bagaimana Anda akan melakukan refactoring pada basis kode Objective-C lama yang besar.
Diharapkan dari kandidat: Pewawancara sedang mengevaluasi pemikiran strategis dan pengalaman Anda dengan sistem lama (legacy systems).
Contoh jawaban: Dalam peran saya sebelumnya, saya mendekati refactoring secara bertahap dengan menambahkan unit test terlebih dahulu, mengisolasi komponen kritis, dan meningkatkan keterbacaan kode. Saya menghindari penulisan ulang besar-besaran dan fokus pada pengurangan hutang teknis secara aman dari waktu ke waktu.
10) Bagaimana Anda memastikan kualitas dan pemeliharaan kode dalam proyek Objective-C?
Diharapkan dari kandidat: Pewawancara ingin mendapatkan wawasan tentang disiplin teknik dan kerja tim Anda.
Contoh jawaban: Di pekerjaan saya sebelumnya, saya menekankan standar pengkodean yang konsisten, tinjauan kode yang menyeluruh, dan dokumentasi. Saya juga mendorong penulisan komponen yang dapat digunakan kembali dan penggunaan alat analisis statis untuk mendeteksi masalah sejak dini.
