30 คำถามและคำตอบสัมภาษณ์ยอดนิยมเกี่ยวกับ Objective-C (ปี 2026)

การเตรียมตัวสำหรับตำแหน่งงานที่ใช้ Objective-C หมายถึงการคาดการณ์ว่าผู้สัมภาษณ์จะถามอะไรบ้างนอกเหนือจากไวยากรณ์และแบบจำลองหน่วยความจำ การสัมภาษณ์งานที่ใช้ Objective-C จะเผยให้เห็นถึงความลึกซึ้งในการให้เหตุผล การตัดสินใจด้านการออกแบบ และความเข้าใจในทางปฏิบัติผ่านคำถามที่ตรงเป้าหมายอย่างสม่ำเสมอ
คำถามเหล่านี้เปิดโอกาสให้กับวิศวกรจบใหม่ วิศวกรระดับกลาง และวิศวกรอาวุโส สะท้อนให้เห็นถึงแนวโน้มของอุตสาหกรรมและการทำงานจริง นายจ้างให้ความสำคัญกับความเชี่ยวชาญทางเทคนิค การวิเคราะห์ และการกำหนดปัญหาจากผู้เชี่ยวชาญที่มีประสบการณ์จริง สามารถทำงานร่วมกับหัวหน้าทีมและผู้จัดการเพื่อประยุกต์ใช้ทักษะ Objective-C ในสภาพแวดล้อมการผลิต มุมมองนี้สนับสนุนการเติบโตในทุกช่วงของเส้นทางอาชีพ อ่านเพิ่มเติม ...
👉 ดาวน์โหลดไฟล์ PDF ฟรี: คำถามและคำตอบสำหรับการสัมภาษณ์งานที่ใช้ภาษา Objective-C
คำถามและคำตอบสัมภาษณ์เกี่ยวกับ Objective-C ที่ได้รับความนิยมสูงสุด
1) Objective-C คืออะไร และใช้เพื่ออะไร?
Objective-C คือ ซูเปอร์เซตที่เข้มงวดของภาษาการเขียนโปรแกรม C ซึ่งเพิ่มความสามารถเชิงวัตถุและรันไทม์แบบไดนามิก เดิมทีพัฒนาขึ้นในช่วงต้นทศวรรษ 1980 และเป็นภาษาหลักที่ใช้สำหรับ macOS และการพัฒนาแอป iOS ก่อนหน้านี้ Swiftมันสืบทอดไวยากรณ์มาจากภาษา C แต่ใช้ระบบการส่งข้อความแบบ Smalltalk สำหรับอ็อบเจ็กต์ ซึ่งช่วยให้สามารถเรียกใช้เมธอดแบบไดนามิกได้ในขณะรันไทม์
Objective-C ใช้สำหรับการพัฒนาping แอปพลิเคชันดั้งเดิมบนแพลตฟอร์มของ Apple เนื่องจากมันผสานรวมอย่างแน่นหนากับเฟรมเวิร์กของ Apple เช่น Foundation และ Cocoa/Cocoa Touch ซึ่งช่วยให้นักพัฒนาสามารถสร้างแอปพลิเคชันโดยเข้าถึง API ของระบบและส่วนประกอบ UI ที่หลากหลายได้อย่างเต็มที่
ตัวอย่าง:
#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) อธิบายโครงสร้างพื้นฐานของโปรแกรม Objective-C
โปรแกรม Objective-C โดยทั่วไปประกอบด้วย:
- คำสั่งพรีโปรเซสเซอร์ (เช่น
#import) - อินเตอร์เฟซ (
@interface) – กำหนดคลาสและเมธอด/คุณสมบัติสาธารณะของคลาส - การดำเนินงาน (
@implementation) – ประกอบด้วยคำจำกัดความของเมธอด - วิธีการ – ฟังก์ชันที่เกี่ยวข้องกับวัตถุ
- ตัวแปร และ นิพจน์และข้อความ – ตรรกะของโค้ด
- ความคิดเห็น เพื่ออธิบายตรรกะของโค้ด
โครงสร้างนี้แยกส่วนต่อประสานออกจากส่วนการใช้งานอย่างชัดเจน ช่วยให้ping แบ่งโค้ดออกเป็นโมดูล
3) โปรโตคอลใน Objective-C คืออะไร และมีประเภทใดบ้าง?
ในภาษา Objective-C นั้น โปรโตคอล มีลักษณะคล้ายกับอินเทอร์เฟซในภาษาโปรแกรมอื่นๆ โดยจะกำหนดชุดของเมธอดที่คลาสใดๆ ก็สามารถนำไปใช้และใช้งานได้ ทำให้สามารถสืบทอดลายเซ็นของเมธอดได้หลายทาง (ไม่ใช่การสืบทอดการใช้งาน)
มีสองประเภท:
- พิธีการอย่างเป็นทางการ – ประกาศโดยใช้
@protocol; สามารถกำหนดได้ จำเป็นต้องใช้ และ ไม่จำเป็น วิธีการ - พิธีการที่ไม่เป็นทางการ – โดยทั่วไปจะนำไปใช้ในรูปแบบของหมวดหมู่
NSObjectเป็นทางเลือกที่ออกแบบไว้
ใช้กรณี: รูปแบบการมอบหมายงานใน UIKit มักใช้โปรโตคอล (เช่น UITableViewDelegate).
4) #import กับ #include ต่างกันอย่างไร?
#includeเป็นคำสั่งพรีโปรเซสเซอร์ของภาษาซีที่แทรกเนื้อหาของไฟล์หนึ่งเข้าไปในอีกไฟล์หนึ่ง ซึ่งอาจก่อให้เกิดปัญหาได้ ปัญหาการรวมหลายรายการ.#importเป็นคำสั่งในภาษา Objective-C ที่ช่วยให้มั่นใจได้ว่าไฟล์จะถูกรวมเข้ามาเท่านั้น ครั้งเดียวเพื่อหลีกเลี่ยงการทำซ้ำ
ดังนั้น #import ปลอดภัยกว่าและเป็นที่นิยมมากกว่าในการพัฒนาด้วยภาษา Objective-C
5) หมวดหมู่ (category) ใน Objective-C มีประโยชน์อย่างไร?
หมวดหมู่ขยายคลาสที่มีอยู่แล้วโดย การเพิ่มเมธอดโดยไม่ต้องสร้างคลาสย่อย หรือแก้ไขโค้ดต้นฉบับ สิ่งเหล่านี้ช่วยให้คุณสามารถแยกวิธีการออกเป็นกลุ่มๆ อย่างเป็นระบบ หรือเพิ่มพฤติกรรมพิเศษให้กับคลาสของเฟรมเวิร์กได้ เช่น NSString.
ตัวอย่างการใช้งาน: การเพิ่มเมธอดยูทิลิตี้ให้กับ NSArray โดยไม่สร้างคลาสย่อย:
@interface NSArray (Utility) - (NSArray *)reversedArray; @end
6) @synthesize ทำอะไร?
การขอ @synthesize คำสั่งนี้บอกคอมไพเลอร์ให้... สร้างเมธอด getter และ setter สำหรับทรัพย์สินที่ประกาศไว้ด้วย @propertyสิ่งนี้ช่วยบังคับใช้การห่อหุ้มข้อมูลและลดโค้ดซ้ำซ้อนโดยอัตโนมัติ
ตั้งแต่ Xcode 4.4, การสังเคราะห์อัตโนมัติ เป็นค่าเริ่มต้น — คุณมักไม่จำเป็นต้องเขียน @synthesize อย่างชัดเจน
7) อธิบายการจัดการหน่วยความจำในภาษา Objective-C
Objective-C ใช้ การนับอ้างอิงอัตโนมัติ (ARC) เพื่อจัดการหน่วยความจำ ARC เพิ่มการเรียก retain/release ที่สร้างโดยคอมไพเลอร์ ซึ่งช่วยให้มั่นใจได้ว่าอ็อบเจ็กต์จะคงอยู่ตราบเท่าที่จำเป็น และ ยกเลิกการจัดสรรเมื่อไม่มีการอ้างอิงเหลืออยู่.
แนวคิดหลัก:
- แหล่งอ้างอิงที่น่าเชื่อถือ รักษาวัตถุให้มีชีวิตอยู่
- การอ้างอิงที่อ่อนแอ อย่าเก็บรักษาอ็อบเจ็กต์ เพื่อหลีกเลี่ยงวงจรการเก็บรักษา
ตัวอย่าง:
@property (strong, nonatomic) NSString *name; @property (weak, nonatomic) id delegate;
8) NSArray และ NSMutableArray แตกต่างกันอย่างไร?
- NSArray: อาร์เรย์ที่ไม่สามารถเปลี่ยนแปลงได้ — เนื้อหาไม่สามารถเปลี่ยนแปลงได้หลังจากสร้างขึ้นแล้ว
- NSMutableArray: อาร์เรย์ที่แก้ไขได้ — อนุญาตให้เพิ่ม ลบ หรือแทนที่องค์ประกอบได้
ตัวอย่าง:
NSMutableArray *list = [NSMutableArray arrayWithObjects:@"A", @"B", nil]; [list addObject:@"C"]; // Allowed
9) การห่อหุ้มข้อมูล (Data Encapsulation) ใน Objective-C คืออะไร?
การห่อหุ้มข้อมูล (Data encapsulation) คือการผูกข้อมูลและฟังก์ชันที่ทำงานกับข้อมูลนั้นเข้าด้วยกัน หน่วยเดียว (คลาส) ในขณะเดียวกันก็จำกัดการเข้าถึงโดยตรงจากภายนอกคลาส ซึ่งจะช่วยเสริมสร้างความเป็นโมดูล การปกป้องข้อมูล และความปลอดภัยสูงสุดtraction
10) การเรียกใช้เมธอดใน Objective-C ทำงานอย่างไร?
Objective-C ใช้ ส่งข้อความ ไวยากรณ์:
[object methodName];
ที่นี่ object ได้รับข้อความเพื่อเรียกใช้งาน methodNameหากวิธีการดังกล่าวไม่ได้รับการแก้ไข ระบบรันไทม์จะจัดการการส่งต่อหรือโยนข้อยกเว้น ความยืดหยุ่นนี้เป็นคุณสมบัติที่ทรงพลังของระบบรันไทม์แบบไดนามิกของ Objective-C
11) อธิบายความแตกต่างระหว่างคุณสมบัติ strong, weak, assign และ copy ในภาษา Objective-C
คุณสมบัติของ Objective-C กำหนดวิธีการจัดการหน่วยความจำสำหรับการอ้างอิงวัตถุ และการเลือกคุณสมบัติที่ถูกต้องมีความสำคัญอย่างยิ่งต่อเสถียรภาพของแอปพลิเคชัน strong แอตทริบิวต์จะเพิ่มจำนวนการอ้างอิงของวัตถุ ทำให้มั่นใจได้ว่าวัตถุนั้นจะยังคงอยู่ในหน่วยความจำตราบใดที่คุณสมบัตินั้นยังคงอยู่ โดยทั่วไปจะใช้สำหรับความสัมพันธ์ด้านความเป็นเจ้าของ weak แอตทริบิวต์ไม่เก็บรักษาวัตถุไว้ โดยจะตั้งค่าการอ้างอิงเป็นค่าอื่นโดยอัตโนมัติ nil เมื่อมีการยกเลิกการจัดสรรอ็อบเจ็กต์ ซึ่งจะช่วยป้องกันวงจรการเก็บรักษา โดยเฉพาะในรูปแบบการมอบหมาย (delegate patterns)
การขอ assign แอตทริบิวต์นี้ใช้สำหรับชนิดข้อมูลพื้นฐาน เช่น จำนวนเต็มและจำนวนทศนิยม มันไม่เก็บรักษาอ็อบเจ็กต์และไม่ควรใช้กับอ็อบเจ็กต์ Objective-C ภายใต้ ARC แอตทริบิวต์ copy จะสร้าง copy ของวัตถุที่กำหนด ซึ่งมีความสำคัญอย่างยิ่งสำหรับวัตถุที่เปลี่ยนแปลงได้ เช่น NSMutableString เพื่อป้องกันการแก้ไขโดยไม่ตั้งใจ
| คุณลักษณะ | รักษาวัตถุไว้ | ใช้กรณี |
|---|---|---|
| แข็งแรง | มี (ใบกำกับภาษีเต็มรูปแบบ) | กรรมสิทธิ์ |
| อ่อนแอ | ไม่ | ผู้ได้รับมอบหมาย |
| กำหนด | ไม่ | primitives |
| สำเนา | สำเนา | ความปลอดภัยที่ไม่เปลี่ยนแปลง |
12) ระบบนับอ้างอิงอัตโนมัติ (ARC) ทำงานภายในอย่างไร?
Automatic Reference Counting (ARC) คือระบบจัดการหน่วยความจำที่ทำงานในขั้นตอนการคอมไพล์ โดยจะแทรกคำสั่ง retain, release และ autorelease โดยอัตโนมัติ แตกต่างจากการเก็บขยะ (garbage collection) ตรงที่ ARC ไม่ได้ทำงานในขณะรันไทม์ แต่คอมไพเลอร์จะวิเคราะห์วงจรชีวิตของอ็อบเจ็กต์และพิจารณาว่าจำเป็นต้องเรียกใช้คำสั่งจัดการหน่วยความจำที่ใดบ้าง วิธีนี้ช่วยให้การใช้หน่วยความจำมีประสิทธิภาพโดยไม่ต้องมีการแทรกแซงจากนักพัฒนา
ARC tracks จะเก็บการอ้างอิงที่แข็งแกร่งไปยังวัตถุและยกเลิกการจัดสรรเมื่อไม่มีการอ้างอิงที่แข็งแกร่งเหลืออยู่ การอ้างอิงที่อ่อนแอจะถูกตั้งค่าเป็นศูนย์โดยอัตโนมัติเมื่อยกเลิกการจัดสรรวัตถุ ซึ่งช่วยเพิ่มความปลอดภัยของแอปพลิเคชัน ARC ไม่ได้จัดการ Core Foundation วัตถุโดยอัตโนมัติ ดังนั้นเทคนิคการเชื่อมโยงเช่น __bridge และ __bridge_transfer จะต้อง
ตัวอย่างเช่น วงจรการอ้างอิงยังคงเกิดขึ้นได้หากวัตถุสองชิ้นอ้างอิงถึงกันอย่างแน่นหนา ซึ่งจะต้องแก้ไขโดยใช้การอ้างอิงแบบอ่อน
13) รันไทม์ของ Objective-C คืออะไร และทำไมจึงมีความสำคัญ?
ระบบรันไทม์ของ Objective-C เป็นระบบที่มีประสิทธิภาพสูง ซึ่งช่วยให้โปรแกรม Objective-C สามารถแสดงพฤติกรรมแบบไดนามิกได้ ระบบนี้อนุญาตให้เรียกใช้เมธอดได้ในขณะรันไทม์ แทนที่จะเป็นขณะคอมไพล์ ทำให้สามารถใช้งานฟีเจอร์ต่างๆ เช่น การเรียกใช้เมธอดแบบไดนามิก การส่งต่อข้อความ และการตรวจสอบภายในได้
ระบบรันไทม์นี้ช่วยให้ Objective-C สามารถระบุได้ว่าจะเรียกใช้เมธอดใดก็ต่อเมื่อมีการส่งข้อความเท่านั้น หากเมธอดนั้นไม่มีอยู่ ระบบรันไทม์จะเสนอทางเลือกหลายวิธีในการจัดการ เช่น การส่งต่อข้อความไปยังอ็อบเจ็กต์อื่น ทำให้ Objective-C มีความยืดหยุ่นและขยายได้สูง
ฟังก์ชันรันไทม์ยังช่วยให้นักพัฒนาสามารถตรวจสอบลำดับชั้นของคลาส เพิ่มเมธอดแบบไดนามิก และสลับการใช้งานเมธอด ซึ่งเป็นสิ่งที่ใช้กันทั่วไปในเฟรมเวิร์กสำหรับการดีบักและการวิเคราะห์
14) บล็อกใน Objective-C คืออะไร และมีประโยชน์อย่างไรบ้าง?
บล็อกใน Objective-C คือ closures ที่ห่อหุ้มโค้ดและตัวแปรไว้เพื่อรอการประมวลผลในภายหลัง มันคล้ายกับ lambda expression ในภาษาโปรแกรมอื่นๆ และมักใช้สำหรับการเรียกกลับ (callbacks) การประมวลผลแบบอะซิงโครนัส และการแจงนับ (enumeration)
บล็อกจะดึงค่าตัวแปรจากขอบเขตโดยรอบ ซึ่งสามารถแก้ไขได้โดยใช้ __block คำสำคัญเหล่านี้ช่วยให้โค้ดอ่านง่ายขึ้นและลดความจำเป็นในการใช้รูปแบบ Delegate ในหลายสถานการณ์
ข้อดีของการใช้บล็อก ได้แก่ การจัดระเบียบโค้ดที่ดีขึ้น การอ่านโค้ดที่ง่ายขึ้น และการเขียนโปรแกรมแบบอะซิงโครนัสที่ง่ายขึ้น อย่างไรก็ตาม นักพัฒนาต้องระมัดระวังเรื่องวงจรการอ้างอิง (retain cycle) เมื่อใช้บล็อกแบบจับค่าอย่างเข้มงวด self. การใช้ __weak การอ้างอิงภายในบล็อกช่วยป้องกันการรั่วไหลของหน่วยความจำ
15) nil และ NULL ใน Objective-C แตกต่างกันอย่างไร?
ในภาษา Objective-C nil แสดงถึงตัวชี้วัตถุที่เป็นค่าว่าง ในขณะที่ NULL แทนค่าตัวชี้ว่างสำหรับชนิดข้อมูลของภาษา C แม้ว่าโดยทั่วไปแล้วจะมีค่าเท่ากัน (ศูนย์) แต่ในเชิงความหมายแล้วมีความแตกต่างกัน และควรใช้ให้เหมาะสม
nil ใช้สำหรับอ็อบเจ็กต์ Objective-C และช่วยให้สามารถส่งข้อความได้อย่างปลอดภัยโดยไม่ทำให้แอปพลิเคชันล่ม เมื่อส่งข้อความไปยัง nilโดยจะส่งคืนค่าศูนย์หรือ nilในทางตรงกันข้าม การยกเลิกการอ้างอิง NULL การใช้ตัวชี้ในภาษา C ส่งผลให้เกิดพฤติกรรมที่ไม่แน่นอนและมักทำให้แอปพลิเคชันหยุดทำงาน
การใช้ nil ช่วยเพิ่มความปลอดภัยและความอ่านง่ายของโค้ดเมื่อจัดการกับอ็อบเจ็กต์ Objective-C ในขณะเดียวกัน NULL ควรสงวนไว้สำหรับโครงสร้าง C และตัวชี้
16) จงอธิบายการมอบหมายงาน (delegation) ในภาษา Objective-C พร้อมยกตัวอย่างประกอบ
การมอบหมายอำนาจ (Delegation) เป็นรูปแบบการออกแบบใน Objective-C ที่อนุญาตให้วัตถุหนึ่งสื่อสารเหตุการณ์หรือการตัดสินใจไปยังวัตถุอื่นได้ โดยใช้วิธีการผ่านโปรโตคอลและการอ้างอิงแบบอ่อน (weak references) เพื่อหลีกเลี่ยงวงจรการอ้างอิง (retain cycles) การมอบหมายอำนาจช่วยส่งเสริมการเชื่อมโยงแบบหลวมๆ และการนำกลับมาใช้ใหม่ได้
อ็อบเจ็กต์ผู้มอบหมายจะกำหนดโปรโตคอล และอ็อบเจ็กต์ผู้รับมอบหมายจะนำโปรโตคอลนั้นไปใช้และดำเนินการ จากนั้นอ็อบเจ็กต์ผู้มอบหมายจะเรียกเมธอดบนอ็อบเจ็กต์ผู้รับมอบหมายเมื่อเกิดเหตุการณ์บางอย่างขึ้น
ตัวอย่างเช่น Table View จะแจ้งเตือน Delegate เมื่อมีการเลือกแถว การออกแบบนี้ช่วยให้สามารถปรับแต่งพฤติกรรมได้โดยไม่ต้องสร้างคลาสย่อย และมีการใช้งานอย่างแพร่หลายในเฟรมเวิร์กต่างๆ ของ Apple
17) ใน Objective-C หมวดหมู่ (category) กับส่วนขยาย (extension) แตกต่างกันอย่างไร?
ทั้งหมวดหมู่และส่วนขยายต่างช่วยให้นักพัฒนาสามารถเพิ่มฟังก์ชันการทำงานให้กับคลาสที่มีอยู่ได้ แต่มีจุดประสงค์ที่แตกต่างกัน หมวดหมู่จะเพิ่มเมธอดสาธารณะให้กับคลาส และมักใช้เพื่อจัดระเบียบโค้ดหรือเพิ่มเมธอดอำนวยความสะดวก ส่วนขยาย หรือที่เรียกว่าส่วนขยายคลาส มักจะประกาศในไฟล์การใช้งาน และอนุญาตให้เพิ่มคุณสมบัติและเมธอดส่วนตัวได้
หมวดหมู่ไม่สามารถเพิ่มตัวแปรอินสแตนซ์ได้ ในขณะที่ส่วนขยายสามารถทำได้ หมวดหมู่มักใช้เพื่อปรับปรุงคลาสของเฟรมเวิร์ก ในขณะที่ส่วนขยายใช้สำหรับการห่อหุ้มและรายละเอียดการใช้งานภายใน
การเข้าใจความแตกต่างจะช่วยให้ออกแบบคลาสได้ดีขึ้นและบำรุงรักษาได้ง่ายยิ่งขึ้น
18) KVC (Key-Value Coding) ใน Objective-C ทำงานอย่างไร?
การเข้ารหัสแบบคีย์-ค่า (Key-Value Coding หรือ KVC) ช่วยให้สามารถเข้าถึงคุณสมบัติของอ็อบเจ็กต์ได้โดยอ้อมโดยใช้คีย์ที่เป็นสตริง ทำให้สามารถตั้งค่าและดึงค่าได้แบบไดนามิกโดยไม่ต้องเรียกใช้เมธอด getter หรือ setter โดยตรง
KVC ถูกใช้กันอย่างแพร่หลายใน Cocoa bindings และเฟรมเวิร์กการแปลงข้อมูลเป็นรูปแบบอนุกรม (serialization frameworks) โดยอาศัยรูปแบบการค้นหาที่กำหนดไว้อย่างชัดเจนเพื่อระบุคีย์ และรองรับตัวดำเนินการคอลเลกชันสำหรับการทำงานกับอาร์เรย์และเซต
ตัวอย่างเช่น valueForKey: ดึงค่าแบบไดนามิก ในขณะที่ setValue:forKey: กำหนดค่าให้ การใช้งานคีย์ที่ไม่ถูกต้องอาจทำให้เกิดข้อผิดพลาดขณะทำงาน ดังนั้นจึงจำเป็นต้องตรวจสอบความถูกต้องอย่างรอบคอบ
19) KVO (Key-Value Observing) คืออะไร และแตกต่างจากการแจ้งเตือนอย่างไร?
การสังเกตค่าคีย์ (Key-Value Observing หรือ KVO) ช่วยให้วัตถุสามารถสังเกตการเปลี่ยนแปลงของคุณสมบัติเฉพาะของวัตถุอื่นได้ KVO มีความเชื่อมโยงอย่างแน่นหนากับ KVC และช่วยให้สามารถแจ้งเตือนอัตโนมัติเมื่อค่าของคุณสมบัติเปลี่ยนแปลง
ต่างจากระบบแจ้งเตือน (notifications) KVO มีความละเอียดสูงและจำเพาะเจาะจงกับคุณสมบัติ ในขณะที่ระบบแจ้งเตือนแบบกระจาย (broadcast) KVO ต้องการการลบตัวสังเกตการณ์อย่างถูกต้องเพื่อหลีกเลี่ยงข้อผิดพลาด ในขณะที่ระบบแจ้งเตือนมีการเชื่อมโยงที่หลวมกว่า
KVO เหมาะสำหรับการสังเกตการเปลี่ยนแปลงของโมเดลในสถาปัตยกรรม MVC ในขณะที่การแจ้งเตือนนั้นเหมาะสมกว่าสำหรับเหตุการณ์ที่เกิดขึ้นทั่วทั้งระบบ
20) ข้อดีและข้อเสียของการใช้ Objective-C ในปัจจุบันมีอะไรบ้าง?
Objective-C มีคุณสมบัติรันไทม์แบบไดนามิก เครื่องมือที่ครบครัน และการผสานรวมอย่างลึกซึ้งกับเฟรมเวิร์กดั้งเดิมของ Apple ช่วยให้การจัดการข้อความมีความยืดหยุ่น และยังคงใช้กันอย่างแพร่หลายในโค้ดเบสขนาดใหญ่และซับซ้อน
อย่างไรก็ตาม Objective-C มีไวยากรณ์ที่ซับซ้อนกว่า มีเส้นทางการเรียนรู้ที่ยากกว่า และส่วนใหญ่ถูกแทนที่ด้วยภาษาอื่นแล้ว Swift เพื่อการพัฒนาใหม่ Swift ช่วยเพิ่มความปลอดภัย ความอ่านง่าย และประสิทธิภาพการทำงานให้ดียิ่งขึ้น
| แง่มุม | ข้อดี | ข้อเสีย |
|---|---|---|
| Runtime | พลวัต | ซับซ้อน |
| วากยสัมพันธ์ | มีอำนาจ | ละเอียด |
| ระบบนิเวศ (Ecosystem) | เป็นผู้ใหญ่ | การรับเลี้ยงบุตรบุญธรรมลดลง |
21) อธิบายวงจรชีวิตของคลาสใน Objective-C ตั้งแต่การจัดสรรจนถึงการยกเลิกการจัดสรร
วงจรชีวิตของอ็อบเจ็กต์ Objective-C เริ่มต้นด้วยการจัดสรรหน่วยความจำและสิ้นสุดด้วยการยกเลิกการจัดสรรหน่วยความจำ วงจรชีวิตนี้ได้รับการจัดการเป็นหลักผ่าน ARC หรือการนับการอ้างอิงด้วยตนเองในระบบรุ่นเก่า กระบวนการเริ่มต้นด้วย allocซึ่งจะจัดสรรหน่วยความจำให้กับวัตถุและกำหนดค่าเริ่มต้นให้กับตัวแปรอินสแตนซ์ของวัตถุนั้นด้วยค่าเริ่มต้น ตามด้วย initซึ่งเป็นการเตรียมวัตถุให้พร้อมใช้งานโดยการกำหนดสถานะเริ่มต้น
เมื่อเริ่มต้นใช้งานแล้ว วัตถุจะยังคงมีชีวิตอยู่ตราบใดที่ยังมีตัวอ้างอิงที่แข็งแกร่งอย่างน้อยหนึ่งตัว ในระหว่างช่วงชีวิตของวัตถุนั้น วัตถุอาจรับข้อความ เข้าร่วมในการมอบหมาย และโต้ตอบกับวัตถุอื่นๆ เมื่อตัวอ้างอิงที่แข็งแกร่งทั้งหมดถูกปล่อยแล้ว ARC จะเรียกใช้ฟังก์ชันโดยอัตโนมัติ deallocซึ่งเป็นที่ที่ดำเนินการภารกิจทำความสะอาด เช่น การลบผู้สังเกตการณ์ หรือการปลดปล่อยทรัพยากร
การทำความเข้าใจวงจรชีวิตนี้เป็นสิ่งสำคัญอย่างยิ่งในการหลีกเลี่ยงปัญหาหน่วยความจำรั่วไหล พอยเตอร์ที่ชี้ไปยังปลายทางที่ไม่ถูกต้อง และการจัดการทรัพยากรที่ไม่เหมาะสม
22) การส่งต่อข้อความใน Objective-C ทำงานอย่างไร?
การส่งต่อข้อความเป็นกลไกหลายขั้นตอนที่ใช้เมื่ออ็อบเจ็กต์ได้รับข้อความที่ไม่สามารถจัดการได้ แทนที่จะเกิดข้อผิดพลาดทันที Objective-C มีโอกาสหลายอย่างในการแก้ไขปัญหาแบบไดนามิก ขั้นแรก รันไทม์จะตรวจสอบ... +resolveInstanceMethod: เพื่อตรวจสอบว่าสามารถเพิ่มเมธอดดังกล่าวแบบไดนามิกได้หรือไม่ หากไม่สามารถแก้ไขได้ ระบบจะดำเนินการต่อไป -forwardingTargetForSelector: เพื่อเปลี่ยนเส้นทางการส่งข้อความไปยังวัตถุอื่น
หากวิธีนั้นล้มเหลว ระบบรันไทม์จะเรียกใช้ -methodSignatureForSelector: และ -forwardInvocation: เพื่อส่งต่อข้อความด้วยตนเอง ซึ่งจะทำให้สามารถใช้งานอ็อบเจ็กต์พร็อกซี ตัวตกแต่ง และพฤติกรรมแบบไดนามิกได้
กลไกนี้แสดงให้เห็นถึงความยืดหยุ่นของ Objective-C และมักใช้ในเฟรมเวิร์กต่างๆ เช่น NSProxy และไลบรารีสำหรับการจำลอง (mocking libraries)
23) วงจรการคงอยู่คืออะไร และเราจะป้องกันได้อย่างไร?
วงจรการอ้างอิงแบบคงค่า (Retain Cycle) เกิดขึ้นเมื่อวัตถุสองชิ้นขึ้นไปถือการอ้างอิงที่แข็งแกร่งต่อกัน ทำให้ ARC ไม่สามารถปลดปล่อยวัตถุเหล่านั้นได้ ส่งผลให้เกิดการรั่วไหลของหน่วยความจำ แม้ว่าวัตถุเหล่านั้นจะไม่จำเป็นอีกต่อไปแล้วก็ตาม วงจรการอ้างอิงแบบคงค่ามักเกิดขึ้นระหว่างวัตถุแม่และวัตถุลูก ตัวแทน (Delegate) และบล็อกที่ดักจับ (Block Capture) self.
เพื่อป้องกันวงจรการอ้างอิงซ้ำซ้อน นักพัฒนาจะใช้การอ้างอิงแบบอ่อนสำหรับความสัมพันธ์ที่ไม่เกี่ยวข้องกับการเป็นเจ้าของ เช่น ตัวแทน (delegates) ในบล็อกต่างๆ __weak or __unsafe_unretained อ้างอิงถึง self ใช้เพื่อหลีกเลี่ยงการจับยึดที่รุนแรง
การระบุวงจรการเก็บรักษาข้อมูลโดยใช้เครื่องมือ และการออกแบบความหมายของการเป็นเจ้าของอย่างรอบคอบ เป็นทักษะที่สำคัญอย่างยิ่งสำหรับนักพัฒนา Objective-C ที่ทำงานกับแอปพลิเคชันที่มีอายุการใช้งานยาวนาน
24) Objective-C จัดการกับการทำงานพร้อมกันและการทำงานแบบมัลติเธรดอย่างไร?
Objective-C มีกลไกหลายอย่างสำหรับการทำงานแบบขนาน โดย Grand Central Dispatch (GCD) เป็นกลไกที่ใช้กันอย่างแพร่หลายที่สุด GCD อนุญาตให้นักพัฒนาส่งงานไปยังคิวที่ดำเนินการได้ทั้งแบบอนุกรมหรือแบบขนานtracการจัดการเกลียว ts ช่วยเพิ่มประสิทธิภาพและความปลอดภัย
เครื่องมือการทำงานพร้อมกันอื่นๆ ได้แก่ NSThread, NSOperationและ NSOperationQueue. ในขณะที่ NSThread นำเสนอการควบคุมระดับต่ำ NSOperationQueue มีฟังก์ชันการจัดการการพึ่งพา การยกเลิก และการจัดการลำดับความสำคัญ
โดยทั่วไป GCD เป็นที่นิยมใช้สำหรับโค้ดที่ต้องการประสิทธิภาพสูง ในขณะที่ NSOperationQueue เหมาะสำหรับเวิร์กโฟลว์ที่ซับซ้อนซึ่งต้องการการควบคุมอย่างละเอียด
25) การสวิซซิ่งแบบเมธอดคืออะไร และควรใช้เมื่อใด?
Method swizzling เป็นเทคนิคที่ทำงานในขณะรันไทม์ ซึ่งช่วยให้นักพัฒนาสามารถสลับการใช้งานของสองเมธอดได้ เทคนิคนี้ทำได้โดยใช้ API ของ Objective-C ในขณะรันไทม์ และช่วยให้สามารถปรับเปลี่ยนพฤติกรรมได้โดยไม่ต้องสร้างคลาสย่อยหรือแก้ไขซอร์สโค้ดเดิม
การสลับตำแหน่ง (Swizzling) มักใช้ในเฟรมเวิร์กสำหรับการวิเคราะห์ การบันทึกข้อมูล การดีบัก และการทดสอบ อย่างไรก็ตาม ควรใช้ด้วยความระมัดระวัง เนื่องจากอาจทำให้เกิดพฤติกรรมที่ไม่คาดคิด ทำให้การดีบักทำได้ยาก และทำให้ฟังก์ชันการทำงานเสียหายหากการใช้งานพื้นฐานมีการเปลี่ยนแปลง
ในการเขียนโค้ดเพื่อใช้งานจริง ควรจัดทำเอกสารอย่างละเอียดเกี่ยวกับการสลับเมธอด (method swizzling) และจำกัดการใช้งานเฉพาะกรณีที่กำหนดไว้อย่างชัดเจน เพื่อรักษาเสถียรภาพของโค้ด
26) จงอธิบายความแตกต่างระหว่างการคัดลอกแบบตื้นและการคัดลอกแบบลึกใน Objective-C
การคัดลอกแบบตื้น (Shallow Copy) จะคัดลอกเฉพาะตัววัตถุที่เป็นคอนเทนเนอร์ แต่จะไม่คัดลอกวัตถุที่อยู่ภายใน ทั้งคอนเทนเนอร์ต้นฉบับและคอนเทนเนอร์ที่คัดลอกมาจะอ้างอิงถึงวัตถุพื้นฐานเดียวกัน ในทางตรงกันข้าม การคัดลอกแบบลึก (Deep Copy) จะคัดลอกทั้งคอนเทนเนอร์และวัตถุที่ซ้อนอยู่ภายในทั้งหมด ทำให้เกิดสำเนาที่เป็นอิสระต่อกัน
โดยทั่วไปแล้ว คลาสคอลเลกชันใน Objective-C จะทำการคัดลอกแบบตื้น (shallow copy) เป็นค่าเริ่มต้น การคัดลอกแบบลึก (deep copying) จำเป็นต้องมีการใช้งานอย่างชัดเจน ซึ่งมักจะใช้ NSCopying หรือการวนซ้ำด้วยตนเอง
| ประเภทการคัดลอก | คัดลอกคอนเทนเนอร์แล้ว | คัดลอกองค์ประกอบ |
|---|---|---|
| ตื้น | มี (ใบกำกับภาษีเต็มรูปแบบ) | ไม่ |
| ลึก | มี (ใบกำกับภาษีเต็มรูปแบบ) | มี (ใบกำกับภาษีเต็มรูปแบบ) |
การเข้าใจความแตกต่างนี้เป็นสิ่งสำคัญอย่างยิ่งเมื่อทำงานกับโครงสร้างข้อมูลที่เปลี่ยนแปลงได้ เพื่อหลีกเลี่ยงผลข้างเคียงที่ไม่พึงประสงค์
27) Objective-C รองรับการตรวจสอบภายใน (Introspection) อย่างไร?
การตรวจสอบโครงสร้างภายใน (Introspection) ใน Objective-C ช่วยให้วัตถุสามารถตรวจสอบโครงสร้างและพฤติกรรมของตนเองได้ในขณะรันไทม์ ซึ่งรวมถึงการตรวจสอบการเป็นสมาชิกของคลาส ความพร้อมใช้งานของเมธอด และการปฏิบัติตามโปรโตคอล เมธอดต่างๆ เช่น isKindOfClass:, respondsToSelector:และ conformsToProtocol: นิยมใช้กันทั่วไป
การตรวจสอบภายในช่วยให้การเขียนโปรแกรมเชิงป้องกันและการปรับเปลี่ยนพฤติกรรมแบบไดนามิกเป็นไปได้ ตัวอย่างเช่น วัตถุหนึ่งสามารถตรวจสอบได้ว่าวัตถุอื่นใช้งานเมธอดนั้นหรือไม่ก่อนที่จะเรียกใช้ ซึ่งช่วยเพิ่มความปลอดภัยในขณะรันไทม์
ความสามารถนี้มีประโยชน์อย่างยิ่งในระบบที่มีการเชื่อมต่อแบบหลวมๆ และสถาปัตยกรรมแบบปลั๊กอิน
28) ในภาษา Objective-C ความแตกต่างระหว่าง isEqual: และ == คืออะไร?
การขอ == ตัวดำเนินการเปรียบเทียบที่อยู่หน่วยความจำ เพื่อตรวจสอบว่าการอ้างอิงสองรายการชี้ไปยังวัตถุเดียวกันหรือไม่ isEqual: เมธอดนี้ใช้เปรียบเทียบเนื้อหาหรือความเท่าเทียมกันเชิงตรรกะของวัตถุ
ตัวอย่างเช่น อ็อบเจ็กต์สตริงสองรายการที่แตกต่างกัน แต่มีเนื้อหาข้อความเหมือนกัน อาจส่งคืนค่าเดียวกันได้ NO เมื่อเปรียบเทียบโดยใช้ ==แต่ YES เมื่อเปรียบเทียบโดยใช้ isEqual:. หลาย Foundation คลาสต่างๆ จะถูกเขียนทับ isEqual: เพื่อให้สามารถเปรียบเทียบความเท่าเทียมกันได้อย่างมีความหมาย
การเลือกวิธีการเปรียบเทียบที่ถูกต้องเป็นสิ่งสำคัญอย่างยิ่งในการหลีกเลี่ยงข้อผิดพลาดทางตรรกะ โดยเฉพาะอย่างยิ่งเมื่อทำงานกับชุดข้อมูล เช่น เซตและพจนานุกรม
29) Objective-C ทำงานร่วมกับ C ได้อย่างไร และ C++ รหัส?
Objective-C เข้ากันได้กับ C อย่างสมบูรณ์และสามารถทำงานร่วมกันได้ C++ ผ่านทางวัตถุประสงค์-C++. โดยใช้ .mm ไฟล์ต่างๆ นักพัฒนาสามารถผสมผสาน Objective-C และ C++ โค้ดภายในไฟล์ต้นฉบับเดียวกัน
การผสานรวมนี้ช่วยให้สามารถนำ C และ ที่มีอยู่มาใช้ซ้ำได้ C++ ไลบรารีเหล่านี้ช่วยให้ได้รับประโยชน์จากคุณสมบัติเชิงวัตถุของ Objective-C นักพัฒนาต้องจัดการการแปลงชื่อและวงจรชีวิตของวัตถุอย่างระมัดระวังเพื่อหลีกเลี่ยงปัญหาด้านหน่วยความจำและความเข้ากันได้
วัตถุประสงค์-C++ โดยทั่วไปมักใช้ในแอปพลิเคชันที่ต้องการประสิทธิภาพสูง เช่น เอ็นจิ้นเกมและการประมวลผลมัลติมีเดีย
30) เมื่อใดที่คุณควรเลือกใช้ Objective-C แทนภาษาอื่น Swift ในการพัฒนาสมัยใหม่?
Objective-C ยังคงเป็นตัวเลือกที่เหมาะสมเมื่อต้องดูแลรักษาโค้ดเบสขนาดใหญ่ที่มีมานานแล้ว ผสานรวมกับเฟรมเวิร์กเก่า หรือต้องการคุณสมบัติรันไทม์ขั้นสูงที่ทำได้ยากในภาษาอื่น Swiftระบบการส่งข้อความแบบไดนามิกและเครื่องมือที่ครบครัน ทำให้มันเหมาะสำหรับงานพัฒนาในระดับต่ำหรืองานที่เน้นเฟรมเวิร์กบางอย่าง
อย่างไรก็ตาม สำหรับโครงการใหม่ ๆ Swift โดยทั่วไปแล้วนิยมใช้มากกว่าเนื่องจากมีความปลอดภัย อ่านง่าย และมีประสิทธิภาพดีกว่า การตัดสินใจควรขึ้นอยู่กับข้อกำหนดของโครงการ ความเชี่ยวชาญของทีม และความสามารถในการบำรุงรักษาในระยะยาว
ความเข้าใจอย่างลึกซึ้งในภาษา Objective-C ยังคงมีคุณค่าอย่างยิ่ง โดยเฉพาะในองค์กรที่มีแอปพลิเคชัน Objective-C อยู่แล้วเป็นจำนวนมาก
🔍 คำถามสัมภาษณ์ยอดนิยมเกี่ยวกับ Objective-C พร้อมสถานการณ์จริงและคำตอบเชิงกลยุทธ์
1) ความแตกต่างที่สำคัญระหว่าง Objective-C และ คืออะไร Swiftแล้วเมื่อไหร่คุณถึงจะยังเลือกใช้ Objective-C ล่ะ?
สิ่งที่คาดหวังจากผู้สมัคร: ผู้สัมภาษณ์ต้องการประเมินความเข้าใจของคุณเกี่ยวกับระบบนิเวศของภาษา และความสามารถในการตัดสินใจเชิงสถาปัตยกรรมอย่างรอบรู้
ตัวอย่างคำตอบ: Objective-C เป็นภาษาแบบไดนามิกที่ใช้การส่งข้อความเป็นหลัก และมีคุณสมบัติการทำงานในขณะรันไทม์ที่แข็งแกร่ง Swift เน้นความปลอดภัย ประสิทธิภาพ และไวยากรณ์ที่ทันสมัย อย่างไรก็ตาม ผมก็ยังคงเลือก Objective-C เมื่อต้องดูแลรักษาหรือขยายระบบ iOS หรือแอปพลิเคชันเก่าขนาดใหญ่ macOS โค้ดเบสที่มีการเขียนใหม่ Swift จะก่อให้เกิดความเสี่ยงหรือค่าใช้จ่ายที่ไม่จำเป็น
2) การจัดการหน่วยความจำใน Objective-C ภายใต้ ARC ทำงานอย่างไร?
สิ่งที่คาดหวังจากผู้สมัคร: ผู้สัมภาษณ์ต้องการทดสอบความเข้าใจของคุณเกี่ยวกับพื้นฐานการจัดการหน่วยความจำ และวิธีที่ ARC ช่วยลดความซับซ้อนของหลักการเหล่านั้น
ตัวอย่างคำตอบ: ภายใต้ ARC คอมไพเลอร์จะแทรกคำสั่ง retain และ release โดยอัตโนมัติในระหว่างการคอมไพล์ นักพัฒนาซอฟต์แวร์ยังคงต้องหลีกเลี่ยงวงจรการอ้างอิงที่แข็งแกร่งโดยใช้การอ้างอิงแบบอ่อนหรือการกำหนดค่าอย่างเหมาะสม โดยเฉพาะอย่างยิ่งในรูปแบบ delegate และการใช้งานแบบบล็อก
3) คุณช่วยอธิบายความแตกต่างระหว่างคุณสมบัติที่แข็งแกร่ง คุณสมบัติที่อ่อนแอ และคุณสมบัติที่กำหนดได้ไหม?
สิ่งที่คาดหวังจากผู้สมัคร: ผู้สัมภาษณ์ต้องการให้แน่ใจว่าคุณเข้าใจเรื่องการเป็นเจ้าของวัตถุและการจัดการวงจรชีวิตของวัตถุ
ตัวอย่างคำตอบ: คุณสมบัติแบบ Strong จะเพิ่มจำนวนการเก็บรักษา (retain count) และทำให้วัตถุคงอยู่ คุณสมบัติแบบ Weak จะไม่เก็บรักษาวัตถุและจะถูกตั้งค่าเป็น nil เมื่อวัตถุถูกยกเลิกการจัดสรร คำสั่ง Assign มักใช้กับประเภทข้อมูลพื้นฐาน (primitive types) และไม่ได้จัดการความเป็นเจ้าของวัตถุ
4) อธิบายสถานการณ์ที่คุณเคยแก้ไขข้อผิดพลาดร้ายแรงที่เกิดขึ้นในแอปพลิเคชัน Objective-C
สิ่งที่คาดหวังจากผู้สมัคร: ผู้สัมภาษณ์กำลังประเมินวิธีการแก้ปัญหาและทักษะการแก้ไขข้อผิดพลาดของคุณ
ตัวอย่างคำตอบ: ในบทบาทก่อนหน้านี้ ผมได้แก้ไขข้อผิดพลาดที่ทำให้โปรแกรมหยุดทำงานซ้ำๆ ซึ่งเกิดจากการปล่อยอ็อบเจ็กต์มากเกินไปในสภาพแวดล้อมแบบมัลติเธรด ผมใช้เครื่องมือ Instruments โดยเปิดใช้งาน Zombies เพื่อแก้ไขปัญหา tracตรวจสอบการยกเลิกการจัดสรรและพบคุณลักษณะของทรัพย์สินที่ไม่ถูกต้อง ซึ่งแก้ไขปัญหาได้เมื่อแก้ไขแล้ว
5) ใน Objective-C หมวดหมู่ต่างจากคลาสย่อยอย่างไร?
สิ่งที่คาดหวังจากผู้สมัคร: ผู้สัมภาษณ์ต้องการประเมินความเข้าใจของคุณเกี่ยวกับการจัดระเบียบโค้ดและความสามารถในการขยายเพิ่มเติม
ตัวอย่างคำตอบ: หมวดหมู่ช่วยให้สามารถเพิ่มเมธอดลงในคลาสที่มีอยู่แล้วโดยไม่ต้องสร้างคลาสย่อย ซึ่งมีประโยชน์สำหรับการแบ่งฟังก์ชันการทำงานออกเป็นโมดูล คลาสย่อยจะสร้างลำดับชั้นของคลาสใหม่และสามารถเขียนทับพฤติกรรมได้ แต่จะเพิ่มการเชื่อมโยงและความซับซ้อน
6) บล็อกใน Objective-C คืออะไร และมีการใช้งานอย่างไรโดยทั่วไป?
สิ่งที่คาดหวังจากผู้สมัคร: ผู้สัมภาษณ์ต้องการตรวจสอบความคุ้นเคยของคุณกับรูปแบบการเขียนโปรแกรม Objective-C สมัยใหม่
ตัวอย่างคำตอบ: บล็อกคือฟังก์ชันปิดที่ห่อหุ้มโค้ดและตัวแปรที่ถูกดักจับไว้ โดยทั่วไปจะใช้สำหรับฟังก์ชันเรียกกลับแบบอะซิงโครนัส ตัวจัดการการเสร็จสิ้น และการแจงนับ ต้องระมัดระวังเพื่อหลีกเลี่ยงวงจรการอ้างอิงโดยใช้การอ้างอิงแบบอ่อนไปยังตัวเอง
7) คุณจะจัดการกับการทำงานแบบมัลติเธรดและการทำงานพร้อมกันใน Objective-C อย่างไร?
สิ่งที่คาดหวังจากผู้สมัคร: ผู้สัมภาษณ์ต้องการทราบว่าคุณมั่นใจได้อย่างไรว่างานจะมีประสิทธิภาพและตอบสนองได้อย่างรวดเร็ว
ตัวอย่างคำตอบ: ในตำแหน่งงานก่อนหน้านี้ ผมใช้ Grand Central Dispatch เป็นอย่างมากในการจัดการงานเบื้องหลังและการอัปเดต UI ผมใช้คิวแบบอนุกรมเพื่อรักษาความสอดคล้องของข้อมูล และใช้คิวแบบขนานสำหรับการดำเนินการที่สำคัญต่อประสิทธิภาพ
8) อธิบายรูปแบบการมอบหมายอำนาจและข้อดีของรูปแบบดังกล่าว
สิ่งที่คาดหวังจากผู้สมัคร: ผู้สัมภาษณ์ต้องการทดสอบความเข้าใจของคุณเกี่ยวกับรูปแบบการออกแบบทั่วไปในการพัฒนาแอปพลิเคชัน iOS
ตัวอย่างคำตอบ: รูปแบบ Delegate ช่วยให้วัตถุหนึ่งสามารถสื่อสารเหตุการณ์หรือข้อมูลกลับไปยังอีกวัตถุหนึ่งได้โดยไม่ต้องมีการเชื่อมโยงที่แน่นหนา ส่งเสริมการแยกส่วนความรับผิดชอบ และทำให้โค้ดทดสอบและบำรุงรักษาได้ง่ายขึ้น
9) อธิบายวิธีการที่คุณจะปรับปรุงโครงสร้างโค้ดเบส Objective-C ขนาดใหญ่และเก่าที่มีอยู่
สิ่งที่คาดหวังจากผู้สมัคร: ผู้สัมภาษณ์กำลังประเมินความคิดเชิงกลยุทธ์และประสบการณ์ของคุณเกี่ยวกับระบบเดิมที่มีอยู่
ตัวอย่างคำตอบ: ในบทบาทล่าสุดของฉัน ฉันใช้วิธีการปรับปรุงโค้ดทีละน้อย โดยเริ่มจากการเพิ่มการทดสอบหน่วยก่อน แยกส่วนประกอบที่สำคัญ และปรับปรุงความสามารถในการอ่านโค้ด ฉันหลีกเลี่ยงการเขียนโค้ดใหม่ทั้งหมด และมุ่งเน้นไปที่การลดภาระทางเทคนิคอย่างปลอดภัยในระยะยาว
10) คุณมั่นใจได้อย่างไรว่าโค้ดในโปรเจ็กต์ Objective-C มีคุณภาพและบำรุงรักษาได้ง่าย?
สิ่งที่คาดหวังจากผู้สมัคร: ผู้สัมภาษณ์ต้องการทราบถึงความรู้ความเข้าใจในสาขาวิชาวิศวกรรมและทักษะการทำงานเป็นทีมของคุณ
ตัวอย่างคำตอบ: ในงานก่อนหน้านี้ ผมให้ความสำคัญกับมาตรฐานการเขียนโค้ดที่สม่ำเสมอ การตรวจสอบโค้ดอย่างละเอียด และการจัดทำเอกสาร นอกจากนี้ ผมยังสนับสนุนการเขียนส่วนประกอบที่สามารถนำกลับมาใช้ซ้ำได้ และการใช้เครื่องมือวิเคราะห์แบบคงที่เพื่อตรวจจับปัญหาตั้งแต่เนิ่นๆ
