2011-09-05 1 views
0

UITableViewController를 모달 뷰로 포함하는 UINavigationController를 제시 할 때 메모리 관리에 문제가 있습니다. 나는 UINavigationController와 UITableViewController를 모두 autorelease하지만, Allocations Instrument를 사용하는 동안 모달 뷰를 열고 닫으면 뷰가 생성하는 메모리가 해제되지 않습니다.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]; 

을 (여기서는 self를 사용하면 dismissModalViewController에 대한 호출로서 초기에 모달 뷰 컨트롤러를 표시 한 뷰 컨트롤러까지 버블 링 됨).