سؤال

ما الفرق بين:

@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" حيث لا يزال من الممكن تعديل القيم الموجودة داخل الكائن بعد ذلك.

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