在我的应用程序上使用Run-> Run with Performance tool-> Leaks后,它发现了泄漏,但我不知道这个工具是否是一个小问题?
我确实发现了一些奇怪的东西,在我的tableview中,如果我尝试选择任何其他单元格,除了第一个单元格之外,它不会成为第一个响应者(这可能与任何事情无关)?
如果有人碰到过这个或者可以发现或指示我到达可能发生的地方,请告诉我?谢谢。
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
}
// Configure the cell...
UITextField *FirstField = [[UITextField alloc] initWithFrame:CGRectMake(10, 10, 130, 25)];
FirstField.delegate = self;
FirstField.tag = indexPath.row; [cell.contentView addSubview:FirstField];
FirstField.returnKeyType = UIReturnKeyNext;
[FirstField release];
return cell;
}
答案 0 :(得分:1)
内存泄漏是由于每次调用函数时都要分配UITextField并将其添加到单元格。
重复使用单元格,每次访问单元格以确定内容时,新的UITextField将添加到单元格中并堆叠在一起
将FirstField的分配移动到分配单元格的位置,以便可以重复使用。
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
UITextField *FirstField = [[UITextField alloc] initWithFrame:CGRectMake(10, 10, 130, 25)];
FirstField.tag = 1
[cell.contentView addSubview:FirstField];
[FirstField release];
}
UITextField *field = (UITextField *)[cell.contentView viewWithTag:1];
field.delegate = self;
field.returnKeyType = UIReturnKeyNext;
return cell;
我还看到你使用field.tag来存储单元格的indexPath.row值,因为你可能需要搜索cell.contentView的视图hirachy来查找TextField子视图。