super معنى - ما هو بالضبط السوبر في Objective-C؟




اوبجيكتيف ترجمة (5)

super ليس مؤشرًا لفئة. Super self ، ولكن عند استخدامه في تعبير رسالة ، فهذا يعني "البحث عن تطبيق يبدأ بجدول أسلوب superclass".

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

أي واحد؟


super

بشكل أساسي ، يسمح لك باستخدام تطبيقات الطبقة الفائقة للفئة الحالية.

للحصول على details gritty لوقت تشغيل Objective-C:

[super message] لها المعنى التالي:

عندما يصادف استدعاء طريقة ، ينشئ المحول البرمجي استدعاء إحدى الدالات objc_msgSend أو objc_msgSend_stret أو objc_msgSendSuper أو objc_msgSendSuper_stret. يتم إرسال الرسائل المرسلة إلى الطبقة الفائقة للكائن (باستخدام الكلمة الرئيسية الفائقة) باستخدام objc_msgSendSuper؛ يتم إرسال الرسائل الأخرى باستخدام objc_msg إرسال. يتم إرسال الأساليب التي تحتوي على بنيات بيانات مثل قيم الإرجاع باستخدام objc_msgSendSuper_stret و objc_msgSend_stret.

لذا ، نعم ، إنها ثابتة ، وغير محددة في وقت التشغيل.


إنها كلمة أساسية تكافئ self ، ولكنها تبدأ في إرسال رسالتها بالبحث باستخدام جدول أسلوب الطبقة الفائقة.



يتم الإعلان عن ثلاثة أشياء هنا: يتم الإعلان عن نوع تعداد مجهول ، ويتم الإعلان عن ShapeType typedef لهذا التعداد المجهول ، ويتم الإعلان عن الأسماء الثلاثة kCircle ، kRectangle ، و kOblateSpheroid على أنها ثوابت تكاملية.

دعونا نكسر ذلك. في أبسط الحالات ، يمكن اعتبار التعداد ك

enum tagname { ... };

هذا يعلن عن التعداد مع tagname . في C و Objective-C (ولكن ليس C ++) ، يجب أن تسبق أي مراجع لهذا مع الكلمة enum . فمثلا:

enum tagname x;  // declare x of type 'enum tagname'
tagname x;  // ERROR in C/Objective-C, OK in C++

من أجل تجنب الاضطرار إلى استخدام الكلمة enum كل مكان ، يمكن إنشاء الرموز المميزة لـ typedef:

enum tagname { ... };
typedef enum tagname tagname;  // declare 'tagname' as a typedef for 'enum tagname'

يمكن تبسيط هذا في سطر واحد:

typedef enum tagname { ... } tagname;  // declare both 'enum tagname' and 'tagname'

وأخيرًا ، إذا لم نكن بحاجة إلى استخدام enum tagname enum ، فيمكننا جعل enum مجهولاً enum tagname فقط باسم typedef:

typedef enum { ... } tagname;

الآن ، في هذه الحالة ، نعلن أن ShapeType هو اسم مطبوع للتعداد غير المجهول. ShapeType هو في الحقيقة مجرد نوع متكامل ، ويجب استخدامه فقط للإعلان عن المتغيرات التي تحمل إحدى القيم المدرجة في التصريح (أي ، واحدة من kCircle ، kRectangle ، و kOblateSpheroid ). يمكنك تعيين متغير ShapeType قيمة أخرى عن طريق الصب ، على الرغم من ذلك ، لذا يجب عليك توخي الحذر عند قراءة قيم التعداد.

وأخيراً ، يتم kCircle kRectangle و kOblateSpheroid و kOblateSpheroid على أنها ثوابت لا يتجزأ في مساحة الاسم العامة. نظرًا لعدم تحديد أي قيم محددة ، يتم تعيينها لأعداد صحيحة متتالية تبدأ من 0 ، لذلك kCircle يكون 0 ، kRectangle هو 1 ، و kOblateSpheroid هو 2.







objective-c super objective-c-runtime