Я просто хотел, чтобы сделать тест выступления на прошивке на моем проекте, и я немного удивлен такое поведения:IOS UIView наследственность плохая работа
В простом SingleView Заявке, если добавить 1000 UITextField
на прямоугольнике (20, 20, 200, 200) от метода viewDidLoad
: главный контроллер, он отлично работает. Это глупо, но это работает.
Теперь я создаю свой класс «MyTextField
», унаследованный от UITextField
и реализующий drawRect:. Реализация drawRect: реализация ничего не делает, и я не переопределяю другие методы UITextField
. Я заменяю свой 1000 UITextField
классом MyTextField
и удивляюсь: он падает. Хуже того, мой iPhone перезагружается!
Я не понимаю, почему. Согласно документации Apple, мой drawRect не требует вызова super. Я также пытаюсь позвонить super drawRect:
, но результат тот же. Перезагрузитесь из-за "Receive memory warning
".
Есть объяснение этому, пожалуйста?
EDIT: быть ясно:
Он разбился (и мой iPhone перезагружается):
@implementation MyTextField
-(void)drawRect:(CGRect)rect {
[super drawRect:rect];
}
@end
Он разбился тоже (и мой iPhone перезагружается):
@implementation MyTextField
-(void)drawRect:(CGRect)rect {
// or does nothing
}
@end
Он работает:
@implementation MyTextField
@end
Вот мой ViewController:
- (void)viewDidLoad {
[super viewDidLoad];
NSLog(@"######### START ###########");
for (int i = 0 ; i < 1000 ; i++) {
MyTextField *tf = [[MyTextField alloc] initWithFrame:CGRectMake(20, 20, 200, 200)];
[self.view addSubview:tf];
}
NSLog(@"######### END ###########");
}
Это делает ничего другого
Посмотрите на этот вопрос для объяснения эффективности при реализации drawRect: http://stackoverflow.com/questions/18748276/why-an-empty-implementation-of-drawrrect-will-adversely-affects-performance- dur – KIDdAe