UPDATE:
Мне кажется, что это в значительной степени ошибка Apple. Я попробовал следующее:
- создать новый однооконный проект
- создайте единый UIPickerView, как показано ниже, только для
Сборщик просто позволяет поворачивать циферблаты. То есть ни переменные
ни одно состояние не манипулируется при взаимодействии со сборщиком.
РЕЗУЛЬТАТ: Независимо от того, использую ли я простое titleForRow: forComponent или viewForRow: forComponent, средство выбора по-прежнему теряет 48 байтов при каждом повороте набора. Кроме того, я даже попытался сделать так, чтобы возвращаемые средства выбора возвращали представления, ранее выделенные в массиве, настроенные как свойство класса в viewController, так что никакие представления не сохраняются и не освобождаются, за исключением того, что средство выбора может делать внутренне после или до того, как оно вызовет методы делегата. И все же протечки случаются.
Мне кажется, что это ошибка от Apple.
ОРИГИНАЛЬНЫЙ ВОПРОС
У меня есть textField, для которого imputView установлен на UIPickerView с 4 компонентами. Средство выбора используется для выбора веса / массы, которая становится текстом в текстовом поле.
В разделе «Инструменты» каждый раз, когда я поворачиваю диск / компонент в UIPickerView, происходит утечка:
Вот трассировка стека для 48-байтовой утечки:
Код, через который UIPickerView получает представление каждого компонента:
- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view
{
if(!view)
{
view = [[[UILabel alloc] initWithFrame:CGRectMake(0, 0, 0, 37)] autorelease];
UILabel *label = (UILabel*)view;
label.autoresizingMask = UIViewAutoresizingFlexibleWidth;
label.textAlignment = UITextAlignmentCenter;
label.font = [UIFont boldSystemFontOfSize:24];
label.backgroundColor = [UIColor clearColor];
}
((UILabel*)view).text = [NSString stringWithFormat:@"%@%i", ((component == 3) ? @"." : @""), row];
return view;
}
- (CGFloat)pickerView:(UIPickerView *)pickerView widthForComponent:(NSInteger)component
{
return 60;
}
А код, который обновляет textField до нового текстового значения:
- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
{
NSString *newWeight = [NSString stringWithFormat:@"%i%i%i.%i",
[pickerView selectedRowInComponent:0],
[pickerView selectedRowInComponent:1],
[pickerView selectedRowInComponent:2],
[pickerView selectedRowInComponent:3]];
self.sampleMassBuffer = [NSDecimalNumber decimalNumberWithString:newWeight];
weightTextField.text = [[numberFormatter stringFromNumber:self.sampleMassBuffer] stringByAppendingFormat:@" %@", currentConfiguration.weightUnits];
}
Я понятия не имею, как возникают утечки или они даже мои!
Может ли это быть ошибка Apple?