2

我有 2 个控制器 InitViewController 和 SettingsViewController。每个视图都有一个调用另一个视图的按钮:

初始化视图控制器

@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

设置视图控制器

@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 的实例仍然存在 =>打印屏幕

我究竟做错了什么?

4

1 回答 1

5

SettingsViewController不会返回到InitViewController创建它的那个。相反,它会创建一个实例InitViewController并呈现它。所以你最终会得到一堆在 和 的实例之间交替的视图InitViewController控制器SettingsViewController

由于您在呈现任何一种视图控制器后都不会关闭它,因此它们都不能被释放。

你的-[SettingsViewController back:]行为应该消除自己,而不是创建和呈现一个新的InitViewController.

@implementation SettingsViewController

- (IBAction)back:(id)sender {
    [self dismissViewControllerAnimated:YES completion:nil];
}
于 2012-11-21T19:42:28.987 回答