gpt4 book ai didi

iphone - UITableView 的内存泄漏问题

转载 作者:行者123 更新时间:2023-11-29 13:50:47 24 4
gpt4 key购买 nike

大家好我有一个 UITableView,其中包含从 sqllite 中获取的项目列表。但是在渲染 View 时存在内存泄漏。以下是我的 cellForRowAtIndexPath 方法。

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(@"unit count is %d", [unit retainCount]); 行。很奇怪,viewDidLoad 之后,控制台显示 3 行“unit count is 2”(我整个屏幕有 3 个项目)。但是当我拖动屏幕让 UITableView 显示下一项时,控制台显示“单位计数为 1”。当调用 [tableView reloadData] 方法时,控制台也显示“unit count is 1”。所以看起来 UITableView 会自动释放数据源。这就是为什么我保持单元的内存引用计数为2,否则会发生过度释放。但代价是unit占用的内存永远不会被释放!

最佳答案

不要调用 -retainCount。

一个对象的绝对保留计数是没有意义的。

您应该调用 release 的次数与导致对象保留的次数完全相同。不会少(除非您喜欢泄漏),当然不会多(除非您喜欢崩溃)。

参见 Memory Management Guidelines了解全部详情。


根据你的描述,unit 的保留计数没有什么奇怪的。您的代码似乎正在打印一个对象的保留计数,该对象在当前通过事件循环期间可能已创建或未创建,因此可能已多次保留/自动释放。或不。没关系。

重要的是分配工具显示的内容。随着时间的推移,你看到物体的增加了吗?如果是这样,它们是什么以及是什么保留了它们(或不释放它们)?

如果这样做,可能是 Heapshot analysis会证明对你有用。

关于iphone - UITableView 的内存泄漏问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4595061/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com