سؤال

هناك بضعة أشياء حول الهدف - C التي ترتبط بي:

أولا، في دليل الهدف, ، من الواضح جدا أن كل فئة تحتاج إلى الاتصال بطريقة التابعة لعلم الفئة الفرعية. من غير الواضح قليلا حول ما إذا كان الفصل الذي يرث مباشرة من NSOBJECT يحتاج إلى الاتصال به init طريقة. هل هذا هو الحال؟ وإذا كان الأمر كذلك، لماذا هذا؟

ثانيا، في القسم حول NSOBJECT، هناك هذا التحذير:

يجب أن تكون هناك فئة لا تحتاج إلى ترث أي سلوك خاص من فئة أخرى، ومع ذلك أن تصنع فرعية من فئة NSOBJECT. يجب أن تكون مثيلات الفصل على الأقل القدرة على التصرف مثل كائنات الهدف C في وقت التشغيل. يرث هذه القدرة من فئة NSOBJECT أكثر بساطة وأكثر موثوقية بكثير من إعادة اختراعها في تعريف فئة جديدة.

هل هذا يعني أنني بحاجة إلى تحديد أن جميع الكائنات ترث من nsobject صراحة؟ أو هل هذا مثل Java / Python / C # حيث جميع الفصول هي فرعية من NSOBJECT؟ إذا لم يكن الأمر كذلك، فهل هناك أي سبب لجعل فئة الجذر بخلاف NSOBJECT؟

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

المحلول

1) في أي وقت يتم تخصيص كائن في الهدف، تمكن ذاكرته في الهدف، ويجب تهيئةها بواسطة مكالمة init. وبعد الفئات الفرعية من. NSObject قد يكون لها متخصصة init الروتين، وفي بداية هذا يجب أن يسميها Superclass " init روتين شيء مثل ذلك:

self = [super init];

فكرة أن تكون كل شيء init الروتين يتدفقون في نهاية المطاف NSObjectinit.

2) تحتاج إلى أن تكون واضحة حول الميراث:

@instance myClass : NSObject { /*...*/ } @end

لا يوجد سبب للحصول على فئة الجذر بخلاف NSObject - يعتمد الكثير من الهدف - C بشدة على هذه الفئة، لذلك تحاول التحايل على أنه سيؤدي إلى إطلاق النار عليك دون داع في القدم.

نصائح أخرى

نظرا لأنه من الممكن أن يرث من فئات الأساس الجذر المختلفة، نعم، يجب أن تعلن صراحة أنك ترثت من NSOBJECT عند إجراء أي فئة جديدة (ما لم تكن بالطبع، إذا كنت تثق في كل شيء آخر، والذي في الوقت نفسه بدوره،

تقريبا أبدا هل هناك حاجة لجعل فئة الأساس الخاصة بك، ولن يكون من السهل القيام بذلك.

يمكن أن يكون الهدف - C لديه فئات جذر متعددة، لذلك عليك أن تكون واضحة حول الميراث. IIRC. nsproxy. هو فئة الجذر الأخرى. من المحتمل ألا ترغب أبدا أو تحتاج إلى إنشاء فئة الجذر الخاصة بك، لكنها موجودة.

أما بالنسبة لاستكشاف NSOBJECTION INIT، فهو جزء مخصص وسلامة جزئية. قد لا يفعل الحرف الأول من NSOBJECT أي شيء الآن، فهذا لا يضمن أن السلوك في المستقبل لن يتغير. دعوة الحث لتكون آمنة.

تحتاج إلى الاتصال [Super Init] لأن هناك رمز وراء تهيئة أنك لا تضطر إلى الكتابة لأنه مكتوب لك في NSOBJECTS INIT، مثل تخصيص الذاكرة الفعلي المحتمل وما إلى ذلك.

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