【发布时间】:2013-12-17 13:49:42
【问题描述】:
EDIT 12-14-2015 : 这个问题在 iOS 7、iOS 8、iOS 9 上再次频繁报告...。我认为 Apple 不再需要这种控制,应该禁止我们用它而不是让这么大的bug
我使用 UIPickerView 和从 Xib 加载的自定义视图。 我用的是方法
-(UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row
forComponent:(NSInteger)component reusingView:(UIView *)view
从 UIPickerViewDelegate 重用我的视图。
在 iOS 6 中,我的 UIPickerview 可以完美运行,并且我的视图可以重复使用。
从 iOS 7 开始,reusingView 总是为零,所以我需要为每一行加载 NIB(我有 250 行)。我的观点是做一些处理,所以它可能会占用一小部分内存,但 x250 = 大内存泄漏。
为了确定问题出在哪里,我用 UILabel 做了一个简单的项目:
-(UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view {
UILabel *label = (UILabel *)view;
if(view == nil) {
label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, pickerView.frame.size.width, 76)];
}
else {
NSLog(@"*******************************************************");
}
NSLog(@"Current inndex : %i",row);
label.text = [NSString stringWithFormat:@"TITRE %i", row];
return label;
}
在 iOS 6 中,我的视图被正确地重用了:
2013-12-17 14:27:25.395 EssaiReusedViewPicker[261:907] 当前索引 : 220 2013-12-17 14:27:25.396 EssaiReusedViewPicker[261:907] ****************************************************** ***** 2013-12-17 14:27:25.397 EssaiReusedViewPicker[261:907] 当前索引:221 2013-12-17 14:27:25.404 EssaiReusedViewPicker[261:907] ****************************************************** ***** 2013-12-17 14:27:25.407 EssaiReusedViewPicker[261:907] 当前索引:222 2013-12-17 14:27:25.409 EssaiReusedViewPicker[261:907] ****************************************************** ***** 2013-12-17 14:27:25.410 EssaiReusedViewPicker[261:907] 当前索引:223 2013-12-17 14:27:25.411 EssaiReusedViewPicker[261:907] ****************************************************** ***** 2013-12-17 14:27:25.412 EssaiReusedViewPicker[261:907] 当前索引:224 2013-12-17 14:27:25.414 EssaiReusedViewPicker[261:907] ****************************************************** ***** 2013-12-17 14:27:25.415 EssaiReusedViewPicker[261:907] 当前索引:225 2013-12-17 14:27:25.420 EssaiReusedViewPicker[261:907] ****************************************************** ***** 2013-12-17 14:27:25.424 EssaiReusedViewPicker[261:907] 当前索引:227 2013-12-17 14:27:25.425 EssaiReusedViewPicker[261:907]
但在 iOS 7 中,这是一个全新的故事……:
2013-12-17 14:36:09.555 EssaiReusedViewPicker[7209:70b] Current inndex : 0
2013-12-17 14:36:09.557 EssaiReusedViewPicker[7209:70b] Current inndex : 1
2013-12-17 14:36:09.557 EssaiReusedViewPicker[7209:70b] Current inndex : 2
2013-12-17 14:36:09.560 EssaiReusedViewPicker[7209:70b] Current inndex : 0
2013-12-17 14:36:09.560 EssaiReusedViewPicker[7209:70b] Current inndex : 1
2013-12-17 14:36:09.561 EssaiReusedViewPicker[7209:70b] Current inndex : 2
2013-12-17 14:36:09.563 EssaiReusedViewPicker[7209:70b] Current inndex : 0
2013-12-17 14:36:09.563 EssaiReusedViewPicker[7209:70b] Current inndex : 1
2013-12-17 14:36:09.564 EssaiReusedViewPicker[7209:70b] Current inndex : 2
2013-12-17 14:36:09.566 EssaiReusedViewPicker[7209:70b] Current inndex : 0
2013-12-17 14:36:09.567 EssaiReusedViewPicker[7209:70b] Current inndex : 1
2013-12-17 14:36:09.567 EssaiReusedViewPicker[7209:70b] Current inndex : 2
2013-12-17 14:36:09.568 EssaiReusedViewPicker[7209:70b] Current inndex : 1
2013-12-17 14:36:09.568 EssaiReusedViewPicker[7209:70b] Current inndex : 2
2013-12-17 14:36:09.569 EssaiReusedViewPicker[7209:70b] Current inndex : 0
2013-12-17 14:36:09.569 EssaiReusedViewPicker[7209:70b] Current inndex : 1
2013-12-17 14:36:14.172 EssaiReusedViewPicker[7209:70b] Current inndex : 3
2013-12-17 14:36:14.350 EssaiReusedViewPicker[7209:70b] Current inndex : 3
2013-12-17 14:36:14.351 EssaiReusedViewPicker[7209:70b] Current inndex : 2
2013-12-17 14:36:14.367 EssaiReusedViewPicker[7209:70b] Current inndex : 4
2013-12-17 14:36:14.667 EssaiReusedViewPicker[7209:70b] Current inndex : 4
2013-12-17 14:36:14.668 EssaiReusedViewPicker[7209:70b] Current inndex : 3
2013-12-17 14:36:14.700 EssaiReusedViewPicker[7209:70b] Current inndex : 5
2013-12-17 14:36:15.067 EssaiReusedViewPicker[7209:70b] Current inndex : 5
2013-12-17 14:36:15.067 EssaiReusedViewPicker[7209:70b] Current inndex : 4
2013-12-17 14:36:15.083 EssaiReusedViewPicker[7209:70b] Current inndex : 6
2013-12-17 14:36:15.367 EssaiReusedViewPicker[7209:70b] Current inndex : 6
2013-12-17 14:36:15.367 EssaiReusedViewPicker[7209:70b] Current inndex : 5
2013-12-17 14:36:15.400 EssaiReusedViewPicker[7209:70b] Current inndex : 7
2013-12-17 14:36:16.416 EssaiReusedViewPicker[7209:70b] Current inndex : 7
那怎么了? iOS 还是...?
【问题讨论】:
-
“(我有 250 行)”,您是否使用
UITableViewCell和UIPickerview子视图? -
不,一个简单的 UIView。这应该不是问题,因为可以将重用的视图与 UILabel 一起使用。即使使用 UILabel,它也不起作用
-
如果你有行,为什么不将
UITableView与自定义单元格一起使用? -
因为我不想要 tableView 而是 UIPickerView ...因为当我需要在列表中选择一个项目时 UIPickerView 是合适的组件。
-
哦,所以你想重用你在
UIPickerView中使用的UILabels
标签: ios ios7 uipickerview