تهيئة الكتلة الفئة
-
01-10-2019 - |
سؤال
تطبيق iPhone الخاص بي يحتوي على فئة مجردة WorkSview. إنها فئة فرعية من Uiview. سيكون WorkView بدوره مجموعة من الفئات الفرعية الخرسانية. اثنان من هؤلاء سيكونون SimplifyView و MultiplyView.
أحاول كتابة الطريقة التي تنشئ مثيلات جديدة من WorkView. يجب أن يكون هذا الطريقة قد تم تمرير الوضع وإرجاع مثيل من الفئة الفرعية الخرسانية المناسبة. لكل إجابة هذا السؤال, ، هذا ما لدي حتى الآن:
+ (id)newWorkingViewWithFrame:(CGRect)frame mode: (modeEnum) mode {
WorkingView *ret;
switch (mode) {
case simplifyMode:
ret = [[SimplifyView alloc]initWithFrame: frame];
break;
case multiplyMode:
ret = [[MultiplyView alloc]initWithFrame: frame];
break;
// additional cases here
default:
return nil;
}
// more initialization here
return ret;
}
حتى الان جيدة جدا. لكن هنا تكمن المشكلة. في طريقة init الخاصة بـ SimplifyView ، أحتاج إلى تشغيل الكائن من خلال طريقة init في Uiview. الاتصال [super initWithFrame: Frame] يحصلني فقط على WorkView ، وليس على طول الطريق إلى Uiview. أفترض أنه يمكنني إنشاء initWithFrame: طريقة في WorkView والتي بدورها تستدعي itwithframe من Uiview: طريقة - ولكن هذا يشعر بالاختراق.
ما هي الطريقة المناسبة للتعامل مع هذا؟
المحلول
إذا اتصلت [super initWithFrame:frame]
من فئتك الفرعية ، سيقوم وقت التشغيل بتسلق التسلسل الهرمي للميراث الذي يبحث عن فئة تنفذ هذه الطريقة ، بدءًا من Super. إذا لم ينفذ Super initWithFrame:
, ، سيستمر وقت التشغيل في التسلق حتى يجد في النهاية التنفيذ الافتراضي ويحتجزه في UIVIEW.