alloc и init в подклассе

Я создал подкласс UIView и предоставил свой собственный drawRect, который отлично работает. Однако я добавил эти методы в свой подкласс:

 - (id) alloc
 {
    NSLog(@"Alloc");
    return [super alloc];
 }

 - (id) init
 {
    NSLog(@"Init");
    if (self = [super init])
        flashWhite = true;
    return self;
 }

Я думал, что всякий раз, когда создается объект подкласса (что происходит через Interface Builder), вызывается метод alloc и init. Однако объект создан, но мои init и alloc не вызваны. Разве это не должно произойти, чтобы гарантировать надлежащую инициализацию?

Кроме того, сборка выдает предупреждение о том, что UIView может не отвечать на "alloc" - не должно ли оно наследовать это от NSObject или как UIView может быть правильно создан?

Моей целью в вышесказанном было то, что мое подклассное представление сможет выполнять пользовательскую инициализацию после того, как IB его создаст.

3 ответа

Решение

init не назначенный инициализатор для UIView; initWithFrame: является. Если вы переопределите initWithFrame:, это должно быть вызвано, но init никогда не вызывается UIView,

Ты прав насчет allocЭто метод класса. UIViews использовать initWithFrame: для инициализации, так что посмотрите на переопределение этого.

Apple обычно создает их переопределения init следующим образом:

-(id)init{
   self = [super init];
    if (self) {
          //Custom Initialization goes here
     }
}

Хотя вышеприведенные комментарии верны. initwithFrame: является назначенным инициализатором. Однако переопределение при форматировании вопроса даст вам предупреждение компилятора о вашей проблеме.

Другие вопросы по тегам