我有 2 个 Controller InitViewController 和 SettingsViewController。每个 View 都有一个调用另一个 View 的按钮:
InitViewController
@interface InitViewController : UIViewController
- (IBAction)loadSettings:(id)sender;
@end
@implementation InitViewController
- (IBAction)loadSettings:(id)sender {
SettingsViewController *vc = [[SettingsViewController alloc] initWithNibName:@"SettingsViewController" bundle:nil];
[self presentViewController:vc animated:YES completion:nil];
vc = nil;
}
@end
SettingsViewController
@interface SettingsViewController : UIViewController
- (IBAction)back:(id)sender;
@end
@implementation SettingsViewController
- (IBAction)back:(id)sender {
InitViewController *vc = [[InitViewController alloc] initWithNibName:@"InitViewController" bundle:nil];
[self presentViewController:vc animated:YES completion:nil];
vc = nil;
}
@end
当我分析应用程序并通过多次点击按钮对其进行测试时,我看到 InitViewController 和 SettingsViewController 的实例仍然存在 =>
我做错了什么?
最佳答案
您的SettingsViewController
不会返回到创建它的InitViewController
。相反,它创建一个 InitViewController
的新实例并呈现它。因此,您最终会得到一堆在 InitViewController
和 SettingsViewController
实例之间交替的 View Controller 。
由于您在呈现任何类型的 View Controller 后都不会关闭它,因此它们都不能被释放。
您的 -[SettingsViewController back:]
操作应该自行关闭,而不是创建并呈现新的 InitViewController
。
@implementation SettingsViewController
- (IBAction)back:(id)sender {
[self dismissViewControllerAnimated:YES completion:nil];
}
关于ios - 查看 Controller 未被释放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13500702/