الهدف C - الأعضاء الثابتة والثوابت
-
21-09-2019 - |
سؤال
ما الفرق بين:
@interface SomeClass : NSObject {
NSObject *something;
}
و
@interface SomeClass : NSObject {
}
NSObject *something;
؟ أيضا ، ما هو الفرق بين جافا نهائي والهدف C (ج) مقدار ثابت؟ وأين يجب أن أعلن أعضاء الفصل الثابت للحالات التالية: 1. عندما يحتاج الفصل فقط إلى ** 2. ** حيث سيكون خاصية يمكن أن تقرأها فئات أخرى؟ أنا أعرف بالفعل عن #Define ، لكن هذا ليس جيدًا للكائنات لأنه يخلق أشياء جديدة في كل مرة. شكرًا!
المحلول
السابق هو متغير مثيل ويخلق أ something
لكل حالة من سومكلاس. إنه يشبه C
typedef struct {
NSObject *something;
} SomeClass;
هذا الأخير يعلن عن متغير عالمي ليس له ارتباط حقيقي مع Someclass. في C ، يعادل
NSObject *something;
محددة في النطاق العالمي. الهدف-C ليس لديه بالفعل متغيرات فئة ، لذلك يتم استخدام المتغيرات العالمية (بدلاً من ذلك ، يتم استخدامها في بعض الأحيان ؛ متغيرات مع وحدة التجميع نطاق وثابت فئة التخزين هي ما يجب استخدامه).
إن أنظف طريقة لتحديد متغير "فئة" هي تحديد متغير ثابت في ملف التنفيذ. وبهذه الطريقة ، لا يمكن إلا لأساليب الفصل الوصول إليها وتجنب تلويث مساحة الاسم العالمية. إذا كنت تريدها متوفرة للجمهور ، فحدد الوصول.
تدمير المتغيرات الفئة بشكل صحيح يمكن أن يكون صعبا. سيتم استرداد الذاكرة وسيتم إغلاق الملفات المفتوحة تلقائيًا عند خروج التطبيق ، ولكن قد لا يتم التعامل مع الموارد الأخرى بشكل جيد.
نصائح أخرى
فيما يتعلق بسؤال "Final vs const" ، كلاهما متشابه. يذكرون أن القيمة لا يمكن أن تتغير. لاحظ أنه في Java ، لأن جميع القيم (باستثناء البدائية) هي مؤشرات ، فإن الكائن الذي يشير إليه يمكن أن يتغير تحتها ، لكن موقع الذاكرة (المؤشر) لن يتغير أبدًا. أعتقد أنك تتوقع سلوكًا مشابهًا في الهدف C ، ومن الجيد دائمًا عدم السماح للعناصر القابلة للتغيير "النهائي" أو "const" حيث لا يزال من الممكن تعديل القيم الموجودة داخل الكائن بعد ذلك.