我有一个相当不寻常的情况,我不太了解内存管理。
我有一个 UITableViewController 用于显示消息,然后创建一个 UINavigationController 并将其视图添加为当前视图的子视图以显示它。我遇到的问题是 Xcode 报告我有潜在的内存泄漏(我同意),因为没有释放 UINavigationController,但是当我按照下面的代码释放它时,当我单击返回返回到表视图。
我在 UITableViewController 中使用了一个保留属性来跟踪当前的 UINavigationController 并管理保留计数,但显然我在这里遗漏了一些东西。
注意:当单击返回按钮并显示消息时发生崩溃 -[UILayoutContainerView removeFromSuperview:]: unrecognized selector sent to instance 0x5537db0
另请注意,如果我删除 [nc release] 代码行,它就可以正常工作。
这是我的代码:
@property(nonatomic, retain) UINavigationController *currentNavigationController;
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
UINavigationController *nc = [[UINavigationController alloc] init];
CGRect ncFrame = CGRectMake(0.0, 0.0, [[self view] frame].size.width, [[self view] frame].size.height);
[[nc view] setFrame:ncFrame];
// I created a CurrentNavigationController property to
// manage the retain counts for me
[self setCurrentNavigationController:nc];
[[self view] addSubview:[nc view]];
[nc pushViewController:messageDetailViewController animated:YES];
UIBarButtonItem *bbi = [[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonSystemItemRewind target:[nc view] action:@selector(removeFromSuperview:)];
nc.navigationBar.topItem.leftBarButtonItem = bbi;
[bbi release];
[nc release];
}