سؤال

أجمع ذلك في الهدف-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.

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