每次旋转组件时,UIPickerView似乎都在泄漏

时间:2012-03-20 15:53:36

标签: ios cocoa-touch uipickerview

更新

在我看来,它几乎是一个苹果虫。我尝试了以下方法:

  1. 创建一个新的单窗口项目
  2. 创建一个UIPickerView,如下所示,只有那个 选择器只允许转动拨号盘。也就是说,既不是变数 交换选择器时也不会操纵任何状态。
  3. 结果:无论我使用简单的titleForRow:forComponent还是viewForRow:forComponent,每次转动拨号时,选取器仍会泄漏48个字节。此外,我甚至尝试将先前在数组中选择的选择器返回视图设置为viewController中的类属性,这样就不会保留或释放任何视图,而是在调用委托方法之后或之前,内部选择器可以执行任何操作。然而,泄漏发生了。

    对我来说似乎是一个苹果虫。

    原始问题

    我有一个textField,其imputView设置为带有4个组件的UIPickerView。拾取器用于选择成为textField中文本的重量/质量。

    在Instruments下,每次我在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];
    }
    

    我不知道泄漏是如何产生的,或者它们是否是我的! 它可能是一个苹果虫吗?

2 个答案:

答案 0 :(得分:0)

我不确定这个问题是否还有问题,除非您说应该使用您的基本示例项目向Apple提交错误报告。

答案 1 :(得分:0)

SDK中的泄漏。我刚刚确认了一个值得信赖的消息来源。