Я создаю UILabels
в своем UIView
, заполнив их данными, добавив их для просмотра и освободив их.Обновление/удаление UILables из вида
UILabel *speed = [self scrollLabel:@"some Text" x:455.0f y:75.0f];
[scrollView addSubview:speed];
[speed release];
Метод:
- (UILabel *)scrollLabel:(NSString *)text x:(float)x_ y:(float)y_ {
UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(x_, y_, 300.0f, 20.0f)];
[label setText:NSLocalizedString(text,@"")];
[label setFont:[UIFont fontWithName:@"Helvetica" size:14]];
[label setTextColor:[UIColor colorWithRed:255.0 green:255.0 blue:255.0 alpha:1.9]];
[label setBackgroundColor:[UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.0]];
return label;
}
Я получил кнопку, где пользователь может перегрузить данные в uilabels. Я удаляю родительский вид всех этих меток из superfiew, генерируя новые данные и выполняя метод, в котором метки снова заданы.
Проблема в том, что старые UILabels все еще существуют, поэтому мой вопрос в том, что лучший способ удалить эти специальные ярлыки?
Я сделал петлю и удалил все подзаголовки, проблема в том, что у меня также есть некоторые другие подпрограммы, которые я не хочу удалять.
Другой вопрос: есть ли лучший способ настройки шрифтовых стилей для нескольких ярлыков?
спасибо за ваш ответ Димитрис. хорошо, плохо добавьте собственный uiview в свой вид прокрутки и удалите их, перейдя через дочерние элементы этого представления. благодаря! Что вы имеете в виду: «вам не нужно выпустить ярлык после добавления его в UIView». вы имеете в виду, что мне не нужно выпускать их, когда я возвращаю автореализованный объект в моем методе или вообще? Какая разница, если я также добавлю новое/copy/сохраняю к возвращенному значению? он имеет более высокий выпуск, тогда, хорошо, но является ли это преимуществом в любом случае? – choise
Прежде всего, ваш код работает нормально, как есть. Вы сохраняете UILabel при его создании, и вы отпускаете его, когда добавляете его в представление. Все в порядке, утечки памяти нет. Что плохого в вашем коде (но не неправильно, просто плохая практика), является тот факт, что ваш метод возвращает сохраненный объект. В Cocoa все методы, возвращающие сохраненный объект, имеют слово * new *, * copy * или * preserve * в их имени, так что разработчик, вызывающий их, будет знать, что он должен сам освободить объект. (продолжение следует) – Dimitris
(продолжение) Таким образом, я предлагал либо автоопределить ярлык перед его возвратом, либо просто переименовать ваш метод в нечто вроде '- (UILabel *) scrollLabelCopy: (NSString *) text x: (float) x_ y : (float) y_', так что каждый раз, когда вы его вызываете, вам напоминают о том, что возвращенный объект уже сохранен *) scrollLabelCopy: (NSString *) text x: (float) x_ y: (float) y_' , так что каждый раз, когда вы его вызываете, вам напоминают о том, что возвращаемый объект уже сохранен. Следующее соглашение может быть запутанным при запуске с управлением памятью в Cocoa. – Dimitris