所以我在故事板中有3个视图控制器,(VC1,VC2和VC3).
每个视图都有一个调用IBAction的按钮,该按钮调用此方法以模态转换到另一个视图:
[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];
只是为了确保在View Controller上插入
- (void)dealloc { NSLog(@"dealloc: %@",self); }
并看看控制台
编辑:
您可以在收到内存警告时执行此操作,而不是在segue之后删除每个视图控制器.您也可以尝试使用dismissViewControllerAnimated:完成:在segue之后
- (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]; } }