好的,抓住了你的头衔。但严肃地说,我无法弄清楚我的代码中泄漏的来源。在仪器中运行它不会显示泄漏,但是当我分析它时它会警告我。这是可疑代码:
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *tableIdentifier = @"Table";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:tableIdentifier];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:tableIdentifier];
}
NSUInteger row = [indexPath row];
if (cityCount >= 1) {
NSString *city = [NSString stringWithFormat:@"%@, %@, %@",
[[cityData objectAtIndex:row] objectAtIndex:0],
[[cityData objectAtIndex:row] objectAtIndex:1],
[[cityData objectAtIndex:row] objectAtIndex:2]
//,[[cityData objectAtIndex:row] objectAtIndex:3]
];
cell.textLabel.text = city;
cell.textLabel.font = [UIFont boldSystemFontOfSize:14];
return cell;
}
else {
cell.textLabel.text = @"No cities were found";
cell.textLabel.font = [UIFont boldSystemFontOfSize:14];
cell.textLabel.textAlignment = UITextAlignmentCenter;
cell.selectionStyle = UITableViewCellSelectionStyleNone;
return cell; //Here's the warning
//Potential leak of an object allocated on line 64 and stored into 'cell'
}
}
答案 0 :(得分:10)
您需要致电autorelease
。改变这个:
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:tableIdentifier];
对此:
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:tableIdentifier] autorelease];
答案 1 :(得分:5)
分配cell
时,您应autorelease
。当您分配某些内容时,您就是所有者,并且必须将其释放。由于您返回单元格,因此您唯一的选择就是自动释放它。
查看内存管理规则here。
代码应该是这样的:
cell = [[[UITableViewCell alloc]
initWithStyle:UITableViewCellStyleDefault reuseIdentifier:tableIdentifier]
autorelease];
现在不需要水管工......