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

คำถามและคำตอบสัมภาษณ์เกี่ยวกับ Objective-C

การเตรียมตัวสำหรับตำแหน่งงานที่ใช้ 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 โดยทั่วไปประกอบด้วย:

  1. คำสั่งพรีโปรเซสเซอร์ (เช่น #import)
  2. อินเตอร์เฟซ (@interface) – กำหนดคลาสและเมธอด/คุณสมบัติสาธารณะของคลาส
  3. การดำเนินงาน (@implementation) – ประกอบด้วยคำจำกัดความของเมธอด
  4. วิธีการ – ฟังก์ชันที่เกี่ยวข้องกับวัตถุ
  5. ตัวแปร และ นิพจน์และข้อความ – ตรรกะของโค้ด
  6. ความคิดเห็น เพื่ออธิบายตรรกะของโค้ด

โครงสร้างนี้แยกส่วนต่อประสานออกจากส่วนการใช้งานอย่างชัดเจน ช่วยให้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 มีคุณภาพและบำรุงรักษาได้ง่าย?

สิ่งที่คาดหวังจากผู้สมัคร: ผู้สัมภาษณ์ต้องการทราบถึงความรู้ความเข้าใจในสาขาวิชาวิศวกรรมและทักษะการทำงานเป็นทีมของคุณ

ตัวอย่างคำตอบ: ในงานก่อนหน้านี้ ผมให้ความสำคัญกับมาตรฐานการเขียนโค้ดที่สม่ำเสมอ การตรวจสอบโค้ดอย่างละเอียด และการจัดทำเอกสาร นอกจากนี้ ผมยังสนับสนุนการเขียนส่วนประกอบที่สามารถนำกลับมาใช้ซ้ำได้ และการใช้เครื่องมือวิเคราะห์แบบคงที่เพื่อตรวจจับปัญหาตั้งแต่เนิ่นๆ

สรุปโพสต์นี้ด้วย: