#iphone #objective-c #memory-management #uiview
#iPhone #objective-c #управление памятью #uiview
Вопрос:
например, существует ли метод addLabel:
- (void)addLabel {
for (NSInteger i = 0; i < 5; i ) {
UILabel *label = [[UILabel alloc] init];
[label setText:@"label"];
[[self view] addSubView:label];
[label release];
}
}
и метод вызывается всякий раз, когда нажимается кнопка.
Нужно ли сначала удалять все метки из вложенных представлений (removeFromSuperview:), прежде чем снова добавлять SUBVIEW?
Ответ №1:
Во-первых, вы должны присвоить UILabel некоторую координату. Чтобы она могла отображаться в нужном месте.
Для этого вы можете использовать следующую строку:
UILabel *lblTaskTitle = [[Выделение UILabel] initWithFrame:CGRectMake(45.0, 5, 200.0, 35.0)];
Другое дело, что будет лучше, если вы удалите другой ярлык. (В этом нет необходимости, но это хорошая практика).
Вы можете сделать это следующим образом:
UILabel *lbl = nil;
NSArray *Arraylbl = [self.view subviews];
for (lbl in Arraylbl){
if ([lbl isKindOfClass:[UILabel class]]){
[lbl removeFromSuperview];
}
}
Надеюсь, у вас все будет хорошо.
Дайте мне знать в случае возникновения каких-либо трудностей.
Комментарии:
1. проблема в том, что в [self.view subviews] нет никакой метки. Я проверил это в NSLog
2. Если вы вызовете вышеуказанную функцию, то она, если метка существует, будет удалена только она. в противном случае никаких проблем нет. Дайте мне знать, если у вас возникнут трудности.
Ответ №2:
Да, вы должны удалить все предыдущие метки из super view, иначе все они будут добавлены поверх предыдущих существующих меток, поэтому новые метки не будут понятны.