我有一个 UIViewController,它有一个 UIPickerView 和 UITableView。 UIPicker 有 3 个组件。
当我尝试通过返回 [anArray count] 来定义每个数组中的组件数量时,程序会卡住,但在加载 UIViewController 时不会抛出错误。
当我将 NSLogs 放入 viewDidLoad:
中时,[self.hours count]
、[self.months count]
和 [self.meridiem count]
,返回正确的值数量。
- (void)viewDidLoad {
[super viewDidLoad];
NSMutableArray *tempHours = [NSMutableArray array];
for (NSInteger i = 0; i < 12; i++) [tempHours addObject:[NSNumber numberWithInteger:(i+1)]];
self.hours = [NSArray array];
hours = tempHours;
[tempHours release];
NSMutableArray *tempMinutes = [NSMutableArray array];
for (NSInteger i = 0; i <= 59; i++) [tempMinutes addObject:[NSNumber numberWithInteger:i]];
self.minutes = [NSArray array];
minutes = tempMinutes;
[tempMinutes release];
NSMutableArray *tempMeridiem = [NSMutableArray array];
for (NSInteger i = 0; i <= 1; i++) [tempMeridiem addObject:[NSNumber numberWithInteger:i]];
self.meridiem = [NSArray array];
meridiem = tempMeridiem;
[tempMeridiem release];
}
现在,在 pickerView:numberOfRowsInComponent:Component:
中,如果我尝试输出 [anArray count]
(其中 anArray 是几个小时的占位符),代码就会卡住而不会出现错误、分钟和子午线)。如果我将 numberOfRows 设置为整数值,或 component+1
一切正常。
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component {
NSInteger numberOfRows;
if (component == 0) {
// numberOfRows = component+1;
numberOfRows = [self.hours count];
}
else if(component == 1) {
// numberOfRows = component+1;
numberOfRows = [self.minutes count];
}
else {
// numberOfRows = component+1;
numberOfRows = [self.meridiem count];
}
return numberOfRows;
}
我感觉我的 NSArray(小时、分钟、子午线)没有被保留,但是运行分析器并没有显示我在该 ViewController 中存在任何内存泄漏。
任何和所有的帮助将不胜感激!
最佳答案
您正在创建不必要的数组,并且没有保留重要的数组。查看您的代码:
self.hours = [NSArray array];
hours = tempHours;
[tempHours release];
在这里,您创建了一个自动释放的数组并将其设置为 self.hours 属性(希望它附加了一个 retain
关键字)。但接下来,您直接访问 ivar 并将其设置为 tempHours。然后,您向 tempHours
发送一条释放消息,而无需保留它。由于 tempHours 是自动释放的,它会在自动释放池的下一次耗尽时神奇地消失。我相信您想做的是:
self.hours = tempHours;
其他数组集合也是如此。
关于objective-c - 在 UIPickerView 的 numberOfRowsInComponent 中返回 [anArray count] 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6863531/