إعلانات @interface المتعددة التي تم إنشاؤها بواسطة Xcode لـ NSViewController؟

StackOverflow https://stackoverflow.com//questions/23022755

سؤال

أقوم بإنشاء تطبيق Cocoa، وأستخدم Xcode لإنشاء أكواد برمجية متنوعة.يعمل بشكل جيد لإنشاء ملفات .h و.m للفئة الفرعية UIView، ولكن عندما أقوم بفئة فرعية UIViewController أحصل على @interface الإعلان متطابق في كلا الملفين، باستثناء أنه موجود في الملف .m ( ) في نهايةالمطاف:

//in MyViewController.h
@interface MyViewController : NSViewController <MyViewDelegate>

@end

لكن أيضا

//in MyViewController.m
@interface MyViewController ()

@end

@implementation MyViewController

@end

ومع ذلك فهو يجمع بشكل جيد.لذا، على افتراض أن هذا سلوك طبيعي، فإن السؤال يتكون من جزأين:(أ) لماذا يحدث هذا ، و (ب) ما هي النتائج - خاصة من حيث ترتيب ترجمة؟

شكرًا!

هل كانت مفيدة؟

المحلول

عندما أستخدم فئة فرعية UIViewController، أحصل على إعلان @interface متطابق في كلا الملفين، باستثناء أنه يحتوي على ( ) في الملف .m

كما لاحظت، هناك كتلتان للواجهة لا متطابقة - () أنه مهم.الواحد مع () هو تمديد الصف, ، والتي تشبه فئة بدون اسم.الفرقان المهمان بين الفئة وامتداد الفصل هما:

  1. يمكنك الإعلان عن متغيرات الحالة في ملحق فئة، ولكن لا يمكنك ذلك في فئة.

  2. يجب أن يظهر ملحق الفئة في نفس الملف مثل كتلة التنفيذ.

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

نصائح أخرى

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

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top