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

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

0 голосов
/ 09 ноября 2010

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

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

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

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

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

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

Ответы [ 3 ]

1 голос
/ 09 ноября 2010

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

1 голос
/ 09 ноября 2010

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

0 голосов
/ 20 сентября 2011

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

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

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

...