我使用UIViewController XIB在IB中创建我的UITableViewCell然后我用这样的代码实现它:
if(cell == nil)
{
UIViewController *viewController = [[UIViewController alloc] initWithNibName:@"TotalViewCell" bundle:nil];
cell = (TotalViewCell *)viewController.view;
//[viewController release];
}
[[cell totalButton] setTitle:@"$100,000" forState:UIControlStateNormal];
// Action when totalButton is tapped
[[cell totalButton] addTarget:self action:@selector(showTotalDetail:) forControlEvents:UIControlEventTouchUpInside];
return cell;
通常,我会释放viewController,但是我在该单元格中放置了一个UIButton,当用户点击按钮时,会调用showTotalDetail。这是showTotalDetail的代码:
-(void)showTotalDetail:(id)sender
{
// Move the totalTableView up!
CGRect totalDetailTableViewFrame = CGRectMake(20, 200, 280, 200);
[totalTableView setFrame:totalDetailTableViewFrame];
// Reload the new totalTableView
[self viewWillAppear:YES];
}
该函数基本上调整了tableView的大小,并将其移动到屏幕上的其他位置。所以,如果我发布了viewController,我会收到EXC_BAD_ACCESS错误。如果我不释放它,它可以工作,但我担心我会有内存泄漏。
有什么建议吗?
感谢。
答案 0 :(得分:3)
您为每个UIViewController
创建了UITableViewCell
?这是非常非标准的行为。如果你需要自定义UITableViewCell
的行为,那么将它子类化为使用视图控制器可能更好。
如果您需要从笔尖加载表格视图单元格,请查看Apple的Table View Programming Guide for iOS。那个例子没有使用视图控制器。
至于你的问题:你是对的,在这种情况下,UIViewController
会泄漏。