我有一個相當不尋常的情況,我不完全理解內存管理。何時從UITableViewController創建時釋放UINavigationController?
我有一個UITableViewController用於顯示消息,然後創建一個UINavigationController並將其視圖添加爲當前視圖的子視圖以顯示它。我遇到的問題是,由於沒有發佈UINavigationController,Xcode報告我有潛在的內存泄漏(我同意),但是當我在下面的代碼中釋放它時,應用程序會崩潰,當我點擊返回到表視圖。
我在UITableViewController中使用了一個保留屬性來跟蹤當前的UINavigationController並管理保留計數,但顯然我在這裏丟失了一些東西。
注:後退按鈕被點擊有消息時發生崩潰 - [UILayoutContainerView removeFromSuperview:]:無法識別的選擇發送到實例0x5537db0
還要注意的是,如果我刪除[NC發佈]的代碼行,它工作得很好。
這裏是我的代碼:
@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];
}
首先沒有注意到你的財產......我想,應用程序崩潰,因爲創建新的navigationControllers。當您將其分配給您的財產時,舊的被刪除,並且所有的視圖都被取消了... –
我編輯了我的代碼,以顯示如何在單擊後退按鈕時彈出視圖。在添加新的導航控制器時,視圖應該全部消失。不過,值得注意的是,點擊後退按鈕後應用程序崩潰。 – jwoww
找到解決方案。去編輯答案並添加代碼。 –