iPhone - modalViewController版本

时间:2011-01-21 13:39:39

标签: iphone release modalviewcontroller

我试图找到释放模态视图控制器的正确方法。

基本上,我有视图控制器,按下按钮后会显示模态视图(全屏)。

TipViewController * tipViewController = [[TipViewController alloc] init];
tipViewController.delegate = self;
[self presentModalViewController:tipViewController animated:YES];   

然后,在模态视图中应该被解雇时我打电话:

[self.delegate didDismissModalView];

最后,父控制器的didDissmissModalView方法如下:

- (void)didDismissModalView 
{
    // dismiss the modal view controller
    [self dismissModalViewControllerAnimated:YES];
}

(我使用ModalViewControllerDelegate协议,这需要实现该方法)。

首先我认为我应该在父控制器的dealloc方法中释放tipViewController:

- (void)dealloc 
{
    [tipViewController release];
}

但后来我看到,它可能是错误的方式,因为模态视图控制器可能会在父控制器关闭之前多次呈现和解除,并且每次都会被分配但最终只会释放一次。

所以也许我应该在呈现之后发布tipViewController?

TipViewController * tipViewController = [[TipViewController alloc] init];
tipViewController.delegate = self;
[self presentModalViewController:tipViewController animated:YES];
[tipViewController release];

我是否可以这样做,虽然现在显示了模态视图?

或许我应该以这种方式发布模态视图:

- (void)didDismissModalView 
{
// dismiss the modal view controller
    [self dismissModalViewControllerAnimated:YES];
    [self.modalViewController release];
}

假设self.modalViewController现在与tipViewController相同?

1 个答案:

答案 0 :(得分:5)

调用presentModalViewController后,应该释放tipViewController:

 TipViewController * tipViewController = [[TipViewController alloc] init];
 tipViewController.delegate = self;
 [self presentModalViewController:tipViewController animated:YES];
 [tipViewController release];