سؤال

ما هو الفرق بين استخدام self.var مقابل فقط var في فئة الهدف-C؟ هل هناك فوائد أو مخاطر على واحد أو آخر؟

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

المحلول

foo = self.var;
self.var = foo;

متطابق من الناحية المفاهيمية ل

foo = [self var];
[self setVar: foo];

لذا باستخدام تدوين DOT ، فأنت تقوم حقًا بإرسال رسائل إلى الذات.

foo = var;
var = foo;

من الناحية المفاهيمية مثل

foo = self->var;
self->var = foo;

لذا فإن عدم استخدام ترميز DOT للوصول إلى متغير مثيل هو نفسه معاملة الذات كمؤشر إلى بنية C والوصول إلى حقول الهيكل مباشرة.

في جميع الحالات تقريبًا ، من الأفضل استخدام الخاصية (إما تدوين DOT أو ترميز إرسال الرسائل). وذلك لأنه يمكن إجراء الخاصية لإجراء الاحتفاظ/النسخ/الإصدار الضروري تلقائيًا لإيقاف تسرب الذاكرة. أيضا ، يمكنك استخدام القيمة الرئيسية مراقبة مع خاصية. كما يمكن للفئات الفرعية تجاوز الخصائص لتوفير تنفيذها الخاص.

الاستثناءان لاستخدام الخصائص هو عند تعيين IVAR في init وعند إطلاقه في Dealloc. هذا لأنك ترغب بالتأكيد في تجنب استخدام فئة فرعية بطريق الخطأ في هذه الطرق ولا تريد أن تثير أي إشعارات KVO.

نصائح أخرى

self.var يدعو منشأه إلى عن على var. خلف الكواليس ، يقوم Objective-C تلقائيًا بإنشاء getter للخصائص (أو يمكنك أن تصنع واحدة بنفسك ، إذا كان ذلك يميل) ، لذلك self.var يستخدم هذا getter. عادي var الوصول إلى متغير المثيل مباشرة (أي ، لا يمر عبر getter للحصول على القيمة).

مكررة من

وربما حوالي عشرة آخرين يمكن أن تجدها في حوالي 15 ثانية باستخدام مربع "البحث" في أعلى الزاوية اليمنى من الموقع.

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