سؤال

لقد قمت بتصنيف 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: ومع ذلك ، فإن التهيئة المخصصة ، فإن التجاوز أثناء تنسيق سؤالك سيحصل على تحذير للمترجم لمشكلتك.

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