我刚刚添加了一些代码来自Apple docs,它展示了如何使用从笔尖创建的自定义UITableViewCells。我是iOS开发的新手,所以我还在学习正确的内存管理,而且代码对于我的工作原理并不是很清楚。当我运行Allocations工具时,它会在下面的代码中显示未分配的内存。具体来说,它显示UITableViewCells在视图控制器弹出导航堆栈后保持活动状态...
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"MyCustomCellIdentifier";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
[[NSBundle mainBundle] loadNibNamed:@"MyCustomCell_iPhone" owner:self options:nil]; //<--Allocations instrument complaining about this line
cell = customCell;
[self setCustomCell:nil];
}
return cell;
}
customCell
是在此视图控制器中定义的实例var,如此...
IBOutlet UITableViewCell *customCell;
@property (nonatomic, retain) IBOutlet UITableViewCell *customCell;
此代码中是否存在问题?
非常感谢你的智慧!
答案 0 :(得分:2)
我比较了文档中的代码:
if (cell == nil) {
[[NSBundle mainBundle] loadNibNamed:@"TVCell" owner:self options:nil];
cell = tvCell;
self.tvCell = nil;
}
使用您的代码:
if (cell == nil) {
[[NSBundle mainBundle] loadNibNamed:@"MyCustomCell_iPhone" owner:self options:nil];
cell = [self customCell];
[self setCustomCell:nil];
}
您指定cell
的行似乎存在差异。 Apple的示例代码使用tvCell
,实例变量,而您使用[self customCell]
,实例变量的属性getter 。这可能是原因吗?尝试更改
cell = [self customCell];
到
cell = customCell;
答案 1 :(得分:1)
就内存而言,你的代码对我来说很好。
我认为发生的是您的视图控制器未被释放。在ObjectAlloc中,您看到表单元格仍然被保留,因为它们依次由表视图保持,而视图控制器又由视图控制器保存...
最常见的原因是忘记在dealloc中设置任何使用视图控制器作为nil委托的内容。
或者可能,但更不可能,您没有发布表格视图。在ObjectAlloc中,离开视图控制器后,我会检查视图控制器本身是否也在内存中。
答案 2 :(得分:0)
使用调试器。在dealloc中设置一个断点。弹出导航控制器时是否被调用?