每次旋转组件时,UIPickerView似乎都在泄漏
更新:
在我看来,这几乎是一个苹果的错误。 我尝试了以下内容:
- 创build一个新的单窗口项目
- 创build一个如下所示的单个UIPickerView,只是select器只允许转动拨号盘。 也就是说,交互选取器时,variables和状态都不会被操纵。
结果:无论是使用简单的titleForRow:forComponent还是viewForRow:forComponent,每次转动拨号盘时,选取器仍然会泄漏48个字节。 此外,我甚至尝试让picker返回先前在viewController中设置为类属性的数组中的视图,这样就不会保留或释放视图,但对于picker在调用委托方法之后或之后可能执行的任何操作。 而且还会发生泄漏。
看起来像一个苹果的bug对我来说。
原文问题
我有一个textField的imputView被设置为一个UIPickerView与4个组件。 选取器用于select成为textField中文本的重量/质量。
在“乐器”下,每次在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]; }
我不知道泄漏是如何起源的,或者甚至是我的! 它可能是一个苹果的错误?
我不确定这个问题是否可以回答,除了说你应该使用基本的示例项目向苹果提交一个错误报告。
SDK中的泄漏。 我刚刚确认了一个值得信赖的来源。