أفضل 30 سؤالاً وجواباً في مقابلات العمل بلغة Objective-C (2026)

أسئلة وأجوبة مقابلات العمل بلغة Objective-C

يتطلب الاستعداد لوظيفة مطور Objective-C توقع ما يبحث عنه القائمون على المقابلة، والذي يتجاوز مجرد قواعد اللغة ونماذج الذاكرة. تكشف مقابلة Objective-C عن عمق التفكير، وحُسن التقدير في التصميم، والفهم العملي من خلال أسئلة مُوجَّهة باستمرار.

تُتيح هذه الأسئلة فرصًا للخريجين الجدد والمهندسين ذوي الخبرة المتوسطة والكبيرة، مما يعكس توجهات الصناعة والنتائج العملية. يُقدّر أصحاب العمل الخبرة التقنية والتحليل وتحديد المشكلات لدى المحترفين ذوي الخبرة العملية، والذين يتعاونون مع قادة الفرق والمدراء لتطبيق مهارات لغة Objective-C في بيئات الإنتاج. يدعم هذا المنظور النمو في مختلف المراحل المهنية.
اقرأ أكثر…

👈 تحميل مجاني لملف PDF: أسئلة وأجوبة مقابلات العمل في لغة Objective-C

أهم أسئلة وأجوبة مقابلات العمل في لغة البرمجة Objective-C

1) ما هي لغة Objective-C ولماذا يتم استخدامها؟

لغة Objective-C هي مجموعة شاملة صارمة للغة البرمجة C وهذا يضيف إمكانيات البرمجة الكائنية وبيئة تشغيل ديناميكية. وقد طُوِّرت في الأصل في أوائل الثمانينيات، وهي اللغة الأساسية المستخدمة لـ macOS وتطوير تطبيقات iOS قبل ذلك Swift. يرث بناء الجملة من لغة C ولكنه يستخدم أسلوب المراسلة Smalltalk للكائنات، مما يسمح باستدعاء الأساليب ديناميكيًا في وقت التشغيل.

تُستخدم لغة Objective-C في التطويرping التطبيقات الأصلية على منصات أبل لأنه يتكامل بشكل وثيق مع أطر عمل Apple مثل Foundation و Cocoa/Cocoa Touch. وهذا يسمح للمطورين ببناء تطبيقات مع إمكانية الوصول الكامل إلى واجهات برمجة التطبيقات الخاصة بالنظام ومكونات واجهة المستخدم الغنية.

على سبيل المثال:

#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 هي توجيهة المعالج المسبق في لغة C التي تُدرج محتويات ملف في ملف آخر، مما قد يتسبب في مشاكل التضمين المتعدد.
  • #import هو توجيه في لغة Objective-C يضمن تضمين الملف فقط مرةتجنباً للتكرار.

وهكذا، #import يُعد أكثر أمانًا ومفضلًا في تطوير تطبيقات Objective-C.


5) ما فائدة الفئات في لغة Objective-C؟

تُوسّع الفئات فئة موجودة عن طريق إضافة طرق دون الحاجة إلى إنشاء فئات فرعية أو تعديل الكود الأصلي. فهي تتيح لك فصل الطرق منطقيًا إلى مجموعات أو إضافة سلوكيات إضافية إلى فئات الإطار مثل NSString.

استخدام المثال: إضافة طرق مساعدة إلى NSArray بدون إنشاء فئات فرعية:

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

6) ما وظيفة @synthesize؟

استخدم @synthesize يُخبر التوجيه المُترجم بـ إنشاء دوال الوصول والتعديل بالنسبة لعقار مُعلن عنه مع @propertyوهذا يفرض التغليف ويؤتمت التعليمات البرمجية النمطية.

منذ Xcode 4.4 التركيب الذاتي الوضع الافتراضي — غالبًا لا تحتاج إلى الكتابة @synthesize صراحة.


7) اشرح إدارة الذاكرة في لغة Objective-C.

يستخدم Objective-C العد المرجعي التلقائي (ARC) لإدارة الذاكرة. يضيف ARC استدعاءات الاحتفاظ/الإفراج التي يُنشئها المُصرّف والتي تضمن بقاء الكائنات نشطة طالما دعت الحاجة يتم إلغاء تخصيص الذاكرة عندما لا تبقى أي مراجع.

المفاهيم الرئيسية:

  • مراجع قوية حافظ على الأشياء حية
  • مراجع ضعيفة لا تحتفظ بالأشياء، لتجنب دورات الاحتفاظ

على سبيل المثال:

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

8) ما الفرق بين NSArray و NSMutableArray؟

  • نسراي: مصفوفة غير قابلة للتغيير — لا يمكن تغيير محتوياتها بعد إنشائها.
  • NSMutableArray: المصفوفة القابلة للتغيير — تسمح بإضافة العناصر أو إزالتها أو استبدالها.

على سبيل المثال:

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

9) ما هو تغليف البيانات في لغة Objective-C؟

يربط تغليف البيانات البيانات والوظائف التي تعمل عليها في وحدة واحدة. وحدة واحدة (فئة) مع تقييد الوصول المباشر من خارج الفئة. وهذا يفرض نمطية التصميم، وحماية البيانات، والخصوصية التامة.tracنشوئها.


10) كيف يعمل استدعاء الأساليب في لغة Objective-C؟

يستخدم Objective-C تمرير الرسالة بناء الجملة:

[object methodName];

هنا، object يتلقى رسالة لاستدعاء methodNameإذا لم يتم تحديد الطريقة، فإن بيئة التشغيل تتولى إعادة التوجيه أو تُطلق استثناءً. تُعد هذه المرونة ميزة قوية لبيئة التشغيل الديناميكية للغة Objective-C.


11) اشرح الفرق بين الخصائص strong و weak و assign و copy في لغة Objective-C.

تحدد خصائص لغة Objective-C كيفية إدارة الذاكرة لمراجع الكائنات، ويُعد اختيار السمة الصحيحة أمرًا بالغ الأهمية لاستقرار التطبيق. strong تزيد هذه الخاصية من عدد المراجع للكائن، مما يضمن بقاءه في الذاكرة طالما أن الخاصية موجودة. وهي تُستخدم عادةً لتحديد علاقات الملكية. weak لا تحتفظ السمة بالكائن، بل تقوم تلقائيًا بتعيين المرجع إلى nil عند إلغاء تخصيص الكائن، مما يساعد على منع دورات الاحتفاظ، خاصة في أنماط التفويض.

استخدم assign تُستخدم السمة لأنواع البيانات الأولية مثل الأعداد الصحيحة والأعداد العشرية. وهي لا تحتفظ بالكائنات، ولا ينبغي استخدامها مع كائنات Objective-C ضمن ARC. تقوم السمة copy بإنشاء copy من الكائن المُسند، وهو أمر بالغ الأهمية بشكل خاص للكائنات القابلة للتغيير مثل NSMutableString لمنع التعديل غير المقصود.

السمة يحتفظ بالكائن الحلول المقترحة
قوي نعم امتلاك
ضعيف لا من الوفود
عين لا البدائيون
نسخة نسخ أمان لا يتزعزع

12) كيف يعمل نظام العد المرجعي التلقائي (ARC) داخليًا؟

نظام عدّ المراجع التلقائي (ARC) هو نظام لإدارة الذاكرة يعمل أثناء الترجمة، حيث يُدرج استدعاءات الاحتفاظ والتحرير والتحرير التلقائي تلقائيًا. على عكس جمع البيانات المهملة، لا يعمل نظام ARC أثناء التشغيل؛ بل يقوم المترجم بتحليل دورات حياة الكائنات وتحديد مواضع استدعاءات إدارة الذاكرة الضرورية. وهذا يضمن استخدامًا فعالًا للذاكرة دون تدخل المطور.

ARC tracيقوم ARC بتخصيص مراجع قوية للكائنات وإلغاء تخصيصها عند عدم وجود مراجع قوية متبقية. يتم تصفير المراجع الضعيفة تلقائيًا عند إلغاء تخصيص الكائن، مما يُحسّن من أمان التطبيق. لا يُدير ARC الذاكرة الأساسية. Foundation الكائنات تلقائيًا، لذا فإن تقنيات الربط مثل __bridge و __bridge_transfer مطلوبة.

على سبيل المثال، يمكن أن تحدث دورات الاحتفاظ إذا كان هناك كائنان يشيران بقوة إلى بعضهما البعض، وهو ما يجب حله باستخدام المراجع الضعيفة.


13) ما هو وقت تشغيل Objective-C، ولماذا هو مهم؟

بيئة تشغيل Objective-C هي نظام قوي يمكّن من السلوك الديناميكي في برامج Objective-C. فهي تسمح بتحديد الطرق أثناء التشغيل بدلاً من وقت الترجمة، مما يتيح ميزات مثل إرسال الطرق الديناميكي، وإعادة توجيه الرسائل، والاستكشاف الذاتي.

تُمكّن هذه البيئة البرمجية لغة Objective-C من تحديد الدالة التي يجب استدعاؤها فقط عند إرسال رسالة. إذا لم تكن الدالة موجودة، توفر البيئة البرمجية عدة خيارات للتعامل معها، مثل إعادة توجيه الرسالة إلى كائن آخر. هذا يجعل Objective-C مرنة وقابلة للتوسيع بدرجة كبيرة.

تسمح وظائف وقت التشغيل أيضًا للمطورين بفحص التسلسلات الهرمية للفئات، وإضافة الطرق ديناميكيًا، وتبديل تطبيقات الطرق، وهو أمر شائع الاستخدام في أطر تصحيح الأخطاء والتحليلات.


14) ما هي الكتل في لغة Objective-C، وما هي فوائدها؟

تُعدّ الكتل في لغة Objective-C عبارة عن دوال مغلقة تُغلّف التعليمات البرمجية والمتغيرات لتنفيذها لاحقًا. وهي تُشبه تعابير لامدا في لغات البرمجة الأخرى، وتُستخدم عادةً في عمليات الاستدعاء، والتنفيذ غير المتزامن، والتعداد.

تلتقط الكتل المتغيرات من نطاقها المحيط، والتي يمكن تعديلها باستخدام __block الكلمة المفتاحية. فهي تُبسط قابلية قراءة الكود وتقلل الحاجة إلى أنماط التفويض في العديد من السيناريوهات.

تشمل فوائد الكتل تحسين موضع الكود، وسهولة قراءته، وتسهيل البرمجة غير المتزامنة. مع ذلك، يجب على المطورين توخي الحذر من حلقات الاحتفاظ عندما تستحوذ الكتل عليها بشكل كبير. 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) اشرح مفهوم التفويض في لغة Objective-C مع ذكر مثال.

التفويض هو نمط تصميم في لغة Objective-C يسمح لكائن ما بنقل الأحداث أو القرارات إلى كائن آخر. ويتم تنفيذه باستخدام البروتوكولات والمراجع الضعيفة لتجنب حلقات الاحتفاظ. يعزز التفويض الترابط المنخفض وإمكانية إعادة الاستخدام.

يُعرّف الكائن المُفوِّض بروتوكولاً، ويتبنى الكائن المُفوَّض هذا البروتوكول ويُنفِّذه. ثم يستدعي الكائن المُفوِّض أساليب الكائن المُفوَّض عند وقوع أحداث مُعينة.

على سبيل المثال، يُعلم عرض الجدول المندوبَ عند تحديد صف. يسمح هذا التصميم بتخصيص السلوك دون الحاجة إلى إنشاء فئات فرعية، وهو شائع الاستخدام في جميع أطر عمل Apple.


17) ما الفرق بين الفئات والامتدادات في لغة Objective-C؟

تتيح كل من الفئات والامتدادات للمطورين إضافة وظائف إلى الفئات الموجودة، لكن لكل منهما غرض مختلف. تضيف الفئات توابع عامة إلى الفئة، وتُستخدم غالبًا لتنظيم التعليمات البرمجية أو إضافة توابع مساعدة. أما الامتدادات، والمعروفة أيضًا بامتدادات الفئات، فتُعلن عادةً في ملفات التنفيذ، وتتيح إضافة خصائص وتوابع خاصة.

لا يمكن للفئات إضافة متغيرات مثيل، بينما يمكن للامتدادات ذلك. تُستخدم الفئات غالبًا لتحسين فئات الإطار، بينما تُستخدم الامتدادات للتغليف وتفاصيل التنفيذ الداخلية.

إن فهم الفرق يضمن تصميمًا أفضل للفئات وتحسينًا في سهولة الصيانة.


18) كيف يعمل ترميز المفتاح والقيمة (KVC) في لغة Objective-C؟

تتيح تقنية ترميز المفتاح والقيمة (KVC) الوصول غير المباشر إلى خصائص الكائن باستخدام مفاتيح نصية. فهي تمكّن من تعيين القيم واسترجاعها ديناميكيًا دون الحاجة إلى استدعاء دوال الجلب أو التعيين بشكل صريح.

تُستخدم مكتبة KVC على نطاق واسع في ربط Cocoa وأطر التسلسل. وهي تعتمد على نمط بحث محدد جيدًا لحل المفاتيح وتدعم عوامل تشغيل المجموعات للعمل مع المصفوفات والمجموعات.

على سبيل المثال، valueForKey: يسترجع قيمة ديناميكيًا، بينما setValue:forKey: يُعيّن قيمة. قد يؤدي استخدام المفتاح بشكل غير صحيح إلى حدوث استثناءات أثناء التشغيل، لذا يلزم إجراء تحقق دقيق.


19) ما هو KVO (مراقبة القيم الرئيسية)، وكيف يختلف عن الإشعارات؟

تتيح خاصية مراقبة القيم الرئيسية (KVO) للكائنات مراقبة التغييرات التي تطرأ على خصائص محددة لكائن آخر. وهي مرتبطة ارتباطًا وثيقًا بخاصية مراقبة القيم الرئيسية (KVC) وتُمكّن من إرسال إشعارات تلقائية عند تغيير قيمة إحدى الخصائص.

على عكس الإشعارات، يتميز KVO بدقة عالية وتحديد خصائص معينة، بينما تعتمد الإشعارات على البث. يتطلب KVO إزالة المراقبين بشكل صحيح لتجنب الأعطال، في حين أن الإشعارات أقل ترابطًا.

يُعد KVO مثاليًا لمراقبة تغييرات النموذج في بنية MVC، بينما تُعد الإشعارات أكثر ملاءمة للأحداث على مستوى النظام.


20) ما هي مزايا وعيوب استخدام لغة Objective-C اليوم؟

توفر لغة Objective-C ميزات تشغيل ديناميكية، وأدوات متطورة، وتكاملاً عميقاً مع أطر عمل Apple القديمة. كما أنها تتيح معالجة مرنة للرسائل، ولا تزال تُستخدم على نطاق واسع في قواعد البيانات البرمجية الكبيرة والمتطورة.

ومع ذلك، فإن لغة Objective-C تتميز بصياغة مطولة، ومنحنى تعلم أكثر صعوبة، وقد تم استبدالها إلى حد كبير بـ Swift للتطوير الجديد. Swift يوفر تحسينات في السلامة وسهولة القراءة والأداء.

البعد المزايا عيوب
وقت التشغيل التفاعل مجمع
بناء الجملة قوي مطنب
النظام الإيكولوجي ناضج انخفاض معدلات التبني

21) اشرح دورة حياة فئة Objective-C من التخصيص إلى إلغاء التخصيص.

تبدأ دورة حياة كائن Objective-C بتخصيص الذاكرة وتنتهي بتحريرها. تُدار هذه الدورة بشكل أساسي من خلال إدارة الذاكرة التلقائية (ARC) أو عدّ المراجع يدويًا في الأنظمة القديمة. تبدأ العملية بـ alloc، والذي يقوم بتخصيص الذاكرة للكائن وتهيئة متغيرات مثيله بالقيم الافتراضية. ويتبع ذلك init، والذي يهيئ الكائن للاستخدام عن طريق تحديد الحالة الأولية.

بمجرد تهيئة الكائن، يبقى نشطًا طالما وُجد مرجع قوي واحد على الأقل. خلال فترة وجوده، قد يتلقى الكائن رسائل، ويشارك في التفويض، ويتفاعل مع كائنات أخرى. عند تحرير جميع المراجع القوية، يستدعي ARC تلقائيًا dealloc، حيث يتم تنفيذ مهام التنظيف مثل إزالة المراقبين أو تحرير الموارد.

يُعد فهم دورة الحياة هذه أمرًا ضروريًا لتجنب تسرب الذاكرة، والمؤشرات المعلقة، والتعامل غير السليم مع الموارد.


22) كيف تعمل عملية إعادة توجيه الرسائل في لغة Objective-C؟

إعادة توجيه الرسائل هي آلية متعددة الخطوات تُستخدم عندما يتلقى كائن ما رسالة لا يستطيع معالجتها. بدلاً من التعطل الفوري، يوفر Objective-C عدة فرص لحل المشكلة ديناميكيًا. أولاً، عمليات التحقق في وقت التشغيل +resolveInstanceMethod: للتحقق مما إذا كان بالإمكان إضافة الطريقة ديناميكيًا. إذا لم يتم حل المشكلة، فسيتم الانتقال إلى -forwardingTargetForSelector: لإعادة توجيه الرسالة إلى كائن آخر.

إذا فشل ذلك، يستدعي وقت التشغيل -methodSignatureForSelector: و -forwardInvocation: لإعادة توجيه الرسالة يدويًا. وهذا يُمكّن الكائنات الوسيطة، والديكورات، والسلوكيات الديناميكية.

تُبرز هذه الآلية مرونة لغة Objective-C وتستخدم بشكل شائع في أطر العمل مثل NSProxy ومكتبات المحاكاة.


23) ما هي دورات الاحتفاظ، وكيف يمكن منعها؟

تحدث دورة الاحتفاظ عندما يحتفظ كائنان أو أكثر بمراجع قوية لبعضهما البعض، مما يمنع ARC من تحريرها. ينتج عن ذلك تسرب للذاكرة، حتى وإن لم تعد الكائنات مطلوبة. تحدث دورات الاحتفاظ عادةً بين الكائنات الأصلية والفرعية، والمفوضين، والكتل التي تستحوذ على الذاكرة. self.

لتجنب دورات الاحتفاظ، يستخدم المطورون مراجع ضعيفة للعلاقات غير المتعلقة بالملكية، مثل المندوبين. في الكتل، __weak or __unsafe_unretained ما يشير إلى self تُستخدم لتجنب الاستحواذ القوي.

يعد تحديد دورات الاحتفاظ باستخدام Instruments وتصميم دلالات الملكية بعناية من المهارات الأساسية لمطوري Objective-C الذين يعملون على تطبيقات طويلة الأمد.


24) كيف تتعامل لغة Objective-C مع التزامن والتعددية الخيطية؟

توفر لغة Objective-C آليات متعددة للتزامن، وتُعدّ آلية Grand Central Dispatch (GCD) الأكثر استخدامًا. تسمح GCD للمطورين بإرسال المهام إلى قوائم انتظار تُنفّذ إما بالتسلسل أو بالتزامن.tracإدارة خيوط ts، مما يحسن الأداء والسلامة.

تتضمن أدوات التزامن الأخرى ما يلي: NSThread, NSOperationو NSOperationQueue. في حين NSThread يوفر تحكمًا منخفض المستوى، NSOperationQueue يوفر إدارة التبعيات والإلغاء ومعالجة الأولويات.

يُفضّل عمومًا استخدام القاسم المشترك الأكبر (GCD) في البرامج ذات الأهمية البالغة للأداء، بينما NSOperationQueue وهو مناسب لسير العمل المعقد الذي يتطلب تحكمًا دقيقًا.


25) ما هو تبديل الأساليب، ومتى يجب استخدامه؟

تبديل الأساليب هو أسلوب برمجي يُتيح للمطورين استبدال تنفيذ أسلوبين. ويتم ذلك باستخدام واجهات برمجة تطبيقات وقت التشغيل في لغة Objective-C، مما يُتيح تعديل السلوك دون الحاجة إلى إنشاء فئات فرعية أو تعديل شفرة المصدر الأصلية.

يُستخدم التبديل بين المتغيرات بشكل شائع في أطر التحليلات والتسجيل وتصحيح الأخطاء والاختبار. مع ذلك، ينبغي استخدامه بحذر لأنه قد يُسبب سلوكًا غير متوقع، ويُصعّب عملية تصحيح الأخطاء، ويُعطّل الوظائف إذا طرأت تغييرات على التطبيقات الأساسية.

في كود الإنتاج، يجب توثيق عملية تبديل الأساليب بعناية وحصرها في حالات استخدام محددة جيدًا للحفاظ على استقرار الكود.


26) اشرح الفرق بين النسخ السطحي والنسخ العميق في لغة Objective-C.

تُكرّر النسخة السطحية الكائن الحاوي فقط، دون الكائنات التي يحتويها. وتشير كل من الحاوية الأصلية والنسخة المنسوخة إلى نفس الكائنات الأساسية. في المقابل، تُكرّر النسخة العميقة كلاً من الحاوية وجميع الكائنات المتداخلة، مما يُنشئ نسخًا مستقلة.

تُجري فئات مجموعات Objective-C عادةً نسخًا سطحية افتراضيًا. أما النسخ العميق فيتطلب تنفيذًا صريحًا، وغالبًا ما يستخدم NSCopying أو التكرار اليدوي.

نوع النسخ تم نسخ الحاوية العناصر المنسوخة
ضحل نعم لا
التناول العميق نعم نعم

يُعد فهم هذا الاختلاف أمراً ضرورياً عند العمل مع هياكل البيانات القابلة للتغيير لتجنب الآثار الجانبية غير المقصودة.


27) كيف تدعم لغة Objective-C عملية الاستبطان؟

تتيح خاصية الاستبطان في لغة Objective-C للكائنات فحص بنيتها وسلوكها أثناء التشغيل. ويشمل ذلك التحقق من انتماء الكائن إلى فئة معينة، وتوافر الطرق، وتوافقه مع البروتوكول. وتشمل هذه الطرق: isKindOfClass:, respondsToSelector:و conformsToProtocol: يشيع استخدامها.

يُمكّن الاستبطان من البرمجة الدفاعية وتكييف السلوك الديناميكي. على سبيل المثال، يمكن لكائن ما التحقق مما إذا كان كائن آخر يُنفذ طريقةً ما قبل استدعائها، مما يُحسّن سلامة وقت التشغيل.

تُعد هذه الإمكانية مفيدة بشكل خاص في الأنظمة ذات الارتباط الضعيف والهياكل القائمة على المكونات الإضافية.


28) ما الفرق بين isEqual: و == في لغة Objective-C؟

استخدم == يقوم عامل التشغيل بمقارنة عناوين الذاكرة، لتحديد ما إذا كان مرجعان يشيران إلى نفس الكائن. 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، يقوم المترجم تلقائيًا بإدراج استدعاءات الاحتفاظ والإفراج أثناء عملية الترجمة. ومع ذلك، لا يزال يتعين على المطورين تجنب حلقات المراجع القوية باستخدام المراجع الضعيفة أو تعيين المراجع بشكل مناسب، لا سيما في أنماط التفويض واستخدام الكتل.


3) هل يمكنك شرح الفرق بين الخصائص القوية والضعيفة وخصائص التعيين؟

المتوقع من المرشح: يريد القائم بالمقابلة التأكد من فهمك لملكية الكائنات وإدارة دورة حياتها.

مثال للإجابة: تزيد الخصائص القوية من عدد مرات الاحتفاظ بالكائن وتحافظ على وجوده. أما الخصائص الضعيفة فلا تحتفظ بالكائن ويتم تعيين قيمتها إلى nil عند تحريره. تُستخدم خاصية التعيين عادةً مع الأنواع الأولية ولا تُدير ملكية الكائن.


4) صف موقفًا قمت فيه بتصحيح عطل صعب في تطبيق Objective-C.

المتوقع من المرشح: يقوم القائم بالمقابلة بتقييم أسلوبك في حل المشكلات ومهاراتك في تصحيح الأخطاء.

مثال للإجابة: في وظيفتي السابقة، قمتُ بتصحيح عطل متكرر ناتج عن تحرير زائد للكائنات في بيئة متعددة الخيوط. استخدمتُ أداة Instruments مع تفعيل خاصية Zombies لـ trace عملية إلغاء التخصيص وتحديد سمة خاصية غير صحيحة، مما أدى إلى حل المشكلة بمجرد تصحيحها.


5) كيف تختلف الفئات عن الفئات الفرعية في لغة Objective-C؟

المتوقع من المرشح: يريد القائم بالمقابلة تقييم فهمك لتنظيم الكود وقابليته للتوسيع.

مثال للإجابة: تتيح الفئات إضافة طرق إلى فئة موجودة دون الحاجة إلى إنشاء فئات فرعية، وهو أمر مفيد لتقسيم الوظائف إلى وحدات. تُنشئ الفئات الفرعية تسلسلات هرمية جديدة للفئات ويمكنها تجاوز السلوك، لكنها تزيد من الترابط والتعقيد.


6) ما هي الكتل في لغة Objective-C، وكيف يتم استخدامها بشكل شائع؟

المتوقع من المرشح: يقوم القائم بالمقابلة بفحص مدى إلمامك بأنماط لغة Objective-C الحديثة.

مثال للإجابة: الكتل هي دوال مغلقة تغلف التعليمات البرمجية والمتغيرات المُخزّنة. تُستخدم عادةً في عمليات الاستدعاء غير المتزامنة، ومعالجات الإكمال، والتعداد. يجب توخي الحذر لتجنب حلقات الاحتفاظ باستخدام مراجع ضعيفة إلى الكائن نفسه.


7) كيف ستتعامل مع تعدد الخيوط والتزامن في لغة Objective-C؟

المتوقع من المرشح: يريد القائم بالمقابلة أن يعرف كيف تضمن الأداء والاستجابة.

مثال للإجابة: في وظيفتي السابقة، كنت أعتمد بشكل كبير على نظام Grand Central Dispatch لإدارة المهام الخلفية وتحديثات واجهة المستخدم. استخدمت قوائم انتظار متسلسلة لضمان اتساق البيانات وقوائم انتظار متزامنة للعمليات بالغة الأهمية للأداء.


8) اشرح نمط المندوب ومزاياه.

المتوقع من المرشح: يختبر القائم بالمقابلة فهمك لأنماط التصميم الشائعة في تطوير تطبيقات iOS.

مثال للإجابة: يُتيح نمط التفويض لكائن ما إمكانية إرسال الأحداث أو البيانات إلى كائن آخر دون ترابط وثيق. وهو يُعزز فصل الاهتمامات ويجعل اختبار الكود وصيانته أسهل.


9) صف كيف يمكنك إعادة هيكلة قاعدة بيانات كبيرة وقديمة مكتوبة بلغة Objective-C.

المتوقع من المرشح: يقوم القائم بالمقابلة بتقييم تفكيرك الاستراتيجي وخبرتك في التعامل مع الأنظمة القديمة.

مثال للإجابة: في وظيفتي السابقة، اتبعتُ نهجاً تدريجياً في إعادة هيكلة الكود، حيث بدأتُ بإضافة اختبارات الوحدة، ثم عزلتُ المكونات الأساسية، وحسّنتُ من سهولة قراءة الكود. تجنبتُ إعادة كتابة أجزاء كبيرة من الكود، وركزتُ على تقليل الديون التقنية تدريجياً وبشكل آمن.


10) كيف تضمن جودة الكود وقابليته للصيانة في مشاريع Objective-C؟

المتوقع من المرشح: يرغب القائم بالمقابلة في الحصول على نظرة ثاقبة حول تخصصك الهندسي ومهاراتك في العمل الجماعي.

مثال للإجابة: في وظيفتي السابقة، كنت أركز على معايير البرمجة المتسقة، ومراجعات الكود الشاملة، والتوثيق. كما شجعت على كتابة مكونات قابلة لإعادة الاستخدام واستخدام أدوات التحليل الثابت لاكتشاف المشكلات مبكراً.

تلخيص هذه التدوينة بـ: