UIPickerView, кажется, протекает каждый раз, когда я вращаю компонент - PullRequest
1 голос
/ 20 марта 2012

UPDATE:

Мне кажется, что это в значительной степени ошибка Apple. Я попробовал следующее:

  1. создать новый однооконный проект
  2. создайте единый UIPickerView, как показано ниже, только для Сборщик просто позволяет поворачивать циферблаты. То есть ни переменные ни одно состояние не манипулируется при взаимодействии со сборщиком.

РЕЗУЛЬТАТ: Независимо от того, использую ли я простое titleForRow: forComponent или viewForRow: forComponent, средство выбора по-прежнему теряет 48 байтов при каждом повороте набора. Кроме того, я даже попытался сделать так, чтобы возвращаемые средства выбора возвращали представления, ранее выделенные в массиве, настроенные как свойство класса в viewController, так что никакие представления не сохраняются и не освобождаются, за исключением того, что средство выбора может делать внутренне после или до того, как оно вызовет методы делегата. И все же протечки случаются.

Мне кажется, что это ошибка от Apple.

ОРИГИНАЛЬНЫЙ ВОПРОС

У меня есть textField, для которого imputView установлен на UIPickerView с 4 компонентами. Средство выбора используется для выбора веса / массы, которая становится текстом в текстовом поле.

В разделе «Инструменты» каждый раз, когда я поворачиваю диск / компонент в UIPickerView, происходит утечка:

enter image description here Вот трассировка стека для 48-байтовой утечки:

enter image description here

Код, через который 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?

Ответы [ 2 ]

0 голосов
/ 27 марта 2012

Утечка в SDK.Я только что подтвердил с надежным источником.

0 голосов
/ 21 марта 2012

Я не уверен, отвечает ли этот вопрос больше, за исключением того, что я должен сообщить об ошибке в Apple, используя ваш базовый пример проекта.

...