Iphone UITableView';内存泄漏问题
大家好 我有一个UITableView,其中包含从sqllite获取的项目列表。但是渲染视图时内存泄漏。下面是我的cellForRowAtIndexPath方法Iphone UITableView';内存泄漏问题,iphone,uitableview,ios,memory-leaks,Iphone,Uitableview,Ios,Memory Leaks,大家好 我有一个UITableView,其中包含从sqllite获取的项目列表。但是渲染视图时内存泄漏。下面是我的cellForRowAtIndexPath方法 static NSString *CellIdentifier = @"BarListItemCell"; BarListItemViewCell *cell = (BarListItemViewCell *)[tableView dequeueReusableC
static NSString *CellIdentifier = @"BarListItemCell";
BarListItemViewCell *cell = (BarListItemViewCell *)[tableView
dequeueReusableCellWithIdentifier: CellIdentifier];
if (cell == nil) {
NSArray * nib = [[NSBundle mainBundle] loadNibNamed:@"BarListItemViewCell" owner:self options:nil];
for (id cellObject in nib) {
if ([cellObject isKindOfClass : [BarListItemViewCell class]]) {
cell = (BarListItemViewCell *) cellObject;
//break;
}
}
NSString * key = [keys objectAtIndex:[indexPath section]];
NSDictionary * unit = [[barListDataSource objectForKey:key] objectAtIndex:[indexPath row]];
NSLog(@"unit count is %d", [unit retainCount]);
cell.name.text = [unit objectForKey:@"name"];
cell.address.text = [unit objectForKey:@"address1"];
cell.features.text = [unit objectForKey:@"features"];
cell.logo.image = [UIImage imageWithData:[unit objectForKey:@"logo"]];
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
//cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
}
return cell;
您可以看到行“NSLog(@“单位计数为%d”,[unit retainCount]);”。非常奇怪的是,viewDidLoad之后,控制台显示3行“unit count is 2”(我在整个屏幕中有3个项目)。但当我拖动屏幕让UITableView显示下一项时,控制台显示“unit count is 1”。调用[tableView reloadData]方法时,控制台也会显示“单位计数为1”。因此,UITableView似乎会自动释放数据源。这就是为什么我保持单元的内存引用计数为2,否则会发生过度释放。但代价是单元占用的内存永远不会被释放 不要调用-重新计数。
一个物体的绝对计数是没有意义的
您应该调用release
的次数与使对象保留的次数完全相同。不少于(除非你喜欢泄漏),当然,不多于(除非你喜欢崩溃)
有关详细信息,请参阅
根据您的描述,
单元的保留计数并不奇怪。您的代码似乎正在打印对象的保留计数,该对象可能在当前通过事件循环期间创建,也可能未创建,因此可能已多次保留/自动删除。或者不是。没关系
重要的是分配工具显示了什么。你看到物体随着时间的推移不断增加吗?如果是,它们是什么?是什么在保留它们(或不释放它们)
如果您这样做,可能会证明这种情况对您有用。不要调用-retainCount。
一个物体的绝对计数是没有意义的
您应该调用release
的次数与使对象保留的次数完全相同。不少于(除非你喜欢泄漏),当然,不多于(除非你喜欢崩溃)
有关详细信息,请参阅
根据您的描述,单元的保留计数并不奇怪。您的代码似乎正在打印对象的保留计数,该对象可能在当前通过事件循环期间创建,也可能未创建,因此可能已多次保留/自动删除。或者不是。没关系
重要的是分配工具显示了什么。你看到物体随着时间的推移不断增加吗?如果是,它们是什么?是什么在保留它们(或不释放它们)
如果您这样做,可能会证明这种情况对您有用。谢谢您的回答,我将首先阅读内存管理指南。但情况是,我必须始终拥有UITableView的数据源的所有权,这意味着我不能向数据源发送自动释放方法。但是在调用[tableView reloadData]之前,我将把数据源引用分配给一个新的列表/字典。这是否意味着我必须首先手动释放上一个数据源?谢谢您的回答,我将首先阅读内存管理指南。但情况是,我必须始终拥有UITableView的数据源的所有权,这意味着我不能向数据源发送自动释放方法。但是在调用[tableView reloadData]之前,我将把数据源引用分配给一个新的列表/字典。这是否意味着我必须先手动释放上一个数据源?