更新
在我看来,它几乎是一个苹果虫。我尝试了以下方法:
结果:无论我使用简单的titleForRow:forComponent还是viewForRow:forComponent,每次转动拨号时,选取器仍会泄漏48个字节。此外,我甚至尝试将先前在数组中选择的选择器返回视图设置为viewController中的类属性,这样就不会保留或释放任何视图,而是在调用委托方法之后或之前,内部选择器可以执行任何操作。然而,泄漏发生了。
对我来说似乎是一个苹果虫。
原始问题
我有一个textField,其imputView设置为带有4个组件的UIPickerView。拾取器用于选择成为textField中文本的重量/质量。
在Instruments下,每次我在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];
}
我不知道泄漏是如何产生的,或者它们是否是我的! 它可能是一个苹果虫吗?
答案 0 :(得分:0)
我不确定这个问题是否还有问题,除非您说应该使用您的基本示例项目向Apple提交错误报告。
答案 1 :(得分:0)
SDK中的泄漏。我刚刚确认了一个值得信赖的消息来源。