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:
является назначенным инициализатором. Однако переопределение при форматировании вопроса даст вам предупреждение компилятора о вашей проблеме.