قم بتوصيل ويبري في فئة فرعية
-
30-09-2019 - |
سؤال
لقد قمت بتصنيف UIVIEW وقدمت DrawRect الخاص بي ، والذي يعمل بشكل جيد. ومع ذلك أضفت هذه الأساليب إلى فئتي الفرعية:
- (id) alloc
{
NSLog(@"Alloc");
return [super alloc];
}
- (id) init
{
NSLog(@"Init");
if (self = [super init])
flashWhite = true;
return self;
}
اعتقدت أنه كلما تم إنشاء كائن من الفئة الفرعية (والذي يحدث من خلال منشئ الواجهة) ، سيتم استدعاء أساليب التخصيص والبدء. ومع ذلك ، تم إنشاء الكائن ، لكن لا يتم استدعاء init و init. ألا يجب أن يحدث هذا لضمان التهيئة السليم؟
أيضًا ، ينتج عن بناء تحذير من أن Uiview قد لا يستجيب لـ "التخصيص" - ألا يتعين عليه أن يرث هذا من NSObject ، أو كيف يمكن إنشاء UIVIEW بشكل صحيح؟
كان هدفي في ما سبق أن يكون وجهة نظري الفرعية قادرة على القيام بالتهيئة المخصصة بعد إنشاء IB.
المحلول
init
ليس هو التهيئة المحددة ل UIView
; initWithFrame:
هو. إذا تجاوزت initWithFrame:
, ، يجب أن يتم استدعاؤه ، ولكن init
لا يتم استدعاؤه من قبل UIView
.
نصائح أخرى
أنت محق في alloc
, ، إنها طريقة الفصل. استخدام Uiviews initWithFrame:
للتهيئة ، لذلك ابحث في تجاوز ذلك.
تقوم شركة Apple عمومًا ببناء التجاوزات init مثل هذا:
-(id)init{
self = [super init];
if (self) {
//Custom Initialization goes here
}
}
على الرغم من أن المعلقين أعلاه صحيحة. initwithFrame:
ومع ذلك ، فإن التهيئة المخصصة ، فإن التجاوز أثناء تنسيق سؤالك سيحصل على تحذير للمترجم لمشكلتك.