الفرق بين الذات.
-
30-09-2019 - |
سؤال
ما هو الفرق بين استخدام 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 للحصول على القيمة).
مكررة من
- كيف يعمل بناء جملة DOT دون صريح @property في Objective-C؟
- ذاتي
- ما الفرق بين استخدام أدوات OBJ-C واستخدام بناء جملة DOT؟
- Ivars ، مع وبدون الذات؟
- هل "الذات" ضرورية؟
وربما حوالي عشرة آخرين يمكن أن تجدها في حوالي 15 ثانية باستخدام مربع "البحث" في أعلى الزاوية اليمنى من الموقع.