2011-09-05 58 views
0

當呈現包含UITableViewController作爲模式視圖的UINavigationController時,內存管理出現問題。我autorelease UINavigationController和UITableViewController,但是當我使用分配工具打開然後關閉模式視圖時,視圖創建的內存在關閉時不會釋放。UINavigationController在模式下顯示時不釋放內存

- (void)showOptions { 
    OptionsViewController *optionsViewController = [[[OptionsViewController alloc] initWithNibName:@"OptionsViewController" bundle:nil] autorelease]; 
    UINavigationController *navController = [[[UINavigationController alloc] initWithRootViewController:optionsViewController] autorelease]; 
    navController.navigationBar.tintColor = [UIColor lightGrayColor]; 
    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) { 
     navController.modalPresentationStyle = UIModalPresentationFormSheet; 
    } 
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(dismissOptions) name:@"dismissOptions" object:nil]; 
    [[(ApplicationDelegate *)[[UIApplication sharedApplication] delegate] viewController] presentModalViewController:navController animated:YES]; 
} 

- (void)dismissOptions { 
    [[NSNotificationCenter defaultCenter] removeObserver:self name:@"dismissOptions" object:nil]; 
    [[(ApplicationDelegate *)[[UIApplication sharedApplication] delegate] viewController] dismissModalViewControllerAnimated:YES]; 
} 

謝謝你的時間。

回答

0

首先,何時/何處發佈「dismissOptions」通知?它是否發佈?在你的代碼中是否有自我指向活着?它是否收到通知?也許最重要的是,這個通知解決了什麼問題?

模態視圖控制器被自動保持,這樣所以代碼應該足夠了:

- (void)showOptions { 
    OptionsViewController *optionsViewController = [[OptionsViewController alloc] initWithNibName:@"OptionsViewController" bundle:nil]; 
    UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:optionsViewController]; 
    [self presentModalViewController:navController animated:YES]; 
    [optionsViewController release]; 
    [navController release]; 
} 

,然後在OptionsViewController,或可能關閉該模態的視圖的任何其它視圖控制器:

[self dismissModalViewControllerAnimated:YES]; 

(請注意,在這裏使用自己的足夠,作爲一個調用dismissModalViewControllerAnimated泡沫到最初呈現模態視圖控制器的視圖控制器)