我的项目中有多个viewcontrollers。第一个viewcontroller在应用程序启动时调用,并显示登录屏幕。凭据正确且用户登录时,模态视图将被取消。另一个viewcontroller实例化如下:
[self dismissModalViewControllerAnimated:NO];
Form *formcontroller = [[Form alloc] init];
[self presentModalViewController:formcontroller animated:YES];
当我的其他视图控制器被呈现时,旧视图控制器消失。在我的第二个视图控制器的顶部,我有一个注销按钮,它完全相同,所以它解除了当前的视图控制器并调用另一个像这样:
-(IBAction)logOut:(id)sender{
[self dissmissModalViewControllerAnimated:NO];
}
在我的观察中消失了:
-(void)viewDidDisappear:(BOOL)animated{
Postform3ViewController *logincontroller = [[Postform3ViewController alloc] init];
[self presentModalViewController:logincontroller animated:YES];
}
问题是: 当我按下注销按钮,然后我返回到logincontroller。凭证仍然填写。所以我的结论是第一个视图控制器保留在内存中。我做错了什么?
编辑:
我找到了自己的解决方案。我正在分析我的应用程序,并且找不到任何内存泄漏。所以我决定发布一切。然后我以为我能把一切都弄清楚自己。我在viewDidAppear方法中这样做了:
-(void)viewDidAppear:(BOOL)animated {
gebruikersnaam.text = @"";
wachtwoord.text = @"";
[self.activeTextField resignFirstResponder];
[super viewDidAppear:animated];
}
答案 0 :(得分:0)
首先,当您使用presentModalViewController
和pushViewController
时,VC会被保留,因此您应该在呈现或推送之后始终将其释放。
其次在第三个代码块中,您看起来正在创建一个logincontroller但是呈现一个formcontroller。也许您想要展示刚刚创建的VC:
[self presentModalViewController:logincontroller animated:animated];
编辑0:对于您的代码,在第一个块中,发布如下:
Form *formcontroller = [[Form alloc] init];
[self presentModalViewController:formcontroller animated:YES];
...
[self dismissModalViewController:formcontroller animated:YES];
[formcontroller release];