Iphone 在模式切换后删除最后一个UIViewController

Iphone 在模式切换后删除最后一个UIViewController,iphone,objective-c,ios,xcode,ipad,Iphone,Objective C,Ios,Xcode,Ipad,所以我在故事板中有3个视图控制器(VC1、VC2和VC3) 每个视图都有一个调用iAction的按钮,该按钮调用此方法以转到另一个视图: [self doSegue: myViewController_ID]; -(void) doSegue:(NSString *)_myViewController_ID { //get UiViewController from storybord with Unique ID UIStoryboard *storyboard = self

所以我在故事板中有3个视图控制器(VC1、VC2和VC3)

每个视图都有一个调用iAction的按钮,该按钮调用此方法以转到另一个视图:

[self doSegue: myViewController_ID];

-(void) doSegue:(NSString *)_myViewController_ID
{
    //get UiViewController from storybord with Unique ID
    UIStoryboard *storyboard = self.storyboard;
    UITableViewController *svc = [storyboard instantiateViewControllerWithIdentifier:_myViewController_ID];

    //set presentation & transition styles
    svc.modalPresentationStyle = UIModalPresentationFullScreen;
    svc.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;

    //do segue
    [self presentViewController:svc animated:YES completion:nil];
}
让我们设置我从VC1到VC2,一次在VC2

我想删除以前的ViewController(VC1)。 如果我现在从VC2转到VC3,我希望从视图层次结构或堆栈VC2中删除,依此类推。

这是因为我不会提供
[self dismissViewControllerAnimated:YES completion:nil]方法

我不希望由于堆栈中所有视图控制器的累积而导致内存增长

注意:我不会使用导航控制器或选项卡控制器,只使用视图控制器


谢谢你的帮助。

只是猜测一下,我没有试过

在VC2上保留VC1的引用->使用prepareForSegue发送:

然后在VC2上

[self.previousViewController willMoveToParentViewController:nil];
[self.previousViewController removeFromParentViewController];
只是为了确保在视图控制器上插入

- (void)dealloc
{
   NSLog(@"dealloc: %@", self);
}
看看控制台


编辑: 您可以在收到内存警告时执行此操作,而不是在segue之后删除每个视图控制器。您还可以尝试在segue之后使用dismissViewControllerAnimated:completion:

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.

    // ???
    if ([self isViewLoaded] && self.view.window == nil) {
        NSLog(@"UNLOADING");
        self.view = nil;
        [self dismissViewControllerAnimated:NO completion:nil];
    }
}

我认为没有导航控制器是不可能的,你确定你不想使用它吗?我觉得你实际上想要一个导航控制器,即使你还没有意识到。模态视图用于中断当前导航的流程。像“转到第2页”——“尚未验证”——“当前模式登录屏幕”——“已验证”——“关闭模式视图”——“继续到第2页”一样,如果您不想看到顶栏而不使用UINavigationController,您可以很容易地将其删除。因此,如果我使用导航控制器。。。要删除las视图控制器,我可以做的是使用一些东西弹出最后一个视图,如“PoptorootViewController激活:”?