الهدف-C: كيفية منع تسرب التجريد
-
23-09-2019 - |
سؤال
أجمع ذلك في الهدف-C يجب أن أعلن أن متغيرات المثيلات كجزء من واجهة صفي حتى لو كانت هذه المتغيرات هي تفاصيل التنفيذ ولديها وصول خاص.
في "الذاتية" C ، يمكنني إعلان متغير في ملف .C الخاص بي وليس مرئيًا خارج وحدة التجميع هذه. يمكنني إعلان ذلك في ملف .H المقابل ، ثم يمكن لأي شخص يرتبط في وحدة التجميع أن يرى المتغير.
أتساءل عما إذا كان هناك خيار مكافئ في الهدف-C ، أو إذا كان لا بد لي من الإعلان عن كل Ivar في .H لفصلي.
آري.
المحلول
آري ،
إشارة جيدة إلى كيفية تحقيق إعلانات متغير مثيل "غير مرئي" يمكن العثور عليها هنا مع الائتمان المحترم باحترام لمات غالاغر.
آمل أن يساعد ذلك ، فرانك
نصائح أخرى
كانت هناك حاجة تقليديا متغيرات المثيل لتحديد حجم الفصل. لقد كانت دائمًا ممارسة سيئة للوصول مباشرة إلى Ivars ، وهذه ليست هي النقطة. في وقت التشغيل الحديث ، هذا أقل ضرورة ، ولكن على أي حال ، ليس تسربًا تجريديًا ما لم يكن العملاء يعتمدون على IVARs للفئة ، وهو أمر مستحيل لأنك تعلنهم باسم @protected
أو @private
, ، حق؟
لتقييد الوصول ، يمكنك استخدام @private
أو @protected
الكلمات الدالة:
@interface Foo : NSObject {
@private
int barPrivate;
@protected
int barProtected;
@public
int barPublic;
}
@end
تعديل: خدش كل شيء ، اتضح أنني بحاجة حقًا إلى بعض النوم.
Ivars @protected
بشكل افتراضي (على الرغم من @private
و @protected
لا تضمن أنه لا تستطيع الفصول الأخرى الوصول إليها-يمكنك دائمًا الوصول إلى IVARs getValue:forKey:
). يجب ألا تصل مباشرة إلى IVARs مباشرة من فئات أخرى مباشرة في أي حال-"الاختيار" هو ما إذا كان عليك كشف IVARs كخصائص (يجب عليك فقط الاعتماد على جميع الفئات بعد الاتفاقية لعدم الوصول إلى IVARs مباشرة).
في وقت تشغيل الهدف-C الجديد ، لا يتعين عليك إعلان IVARs على الإطلاق ، حيث يمكن تصنيعها في وقت التشغيل ، لكن لسوء الحظ ، لا يعمل هذا مع جهاز iPhone Simulator ، لذلك من الأفضل الآن إعلان كل IVARS في ملف .h.