如何切换视图并释放先前视图的内存

时间:2014-04-11 20:34:23

标签: ios objective-c cocoa-touch uinavigationcontroller

我有一个带有多个视图的应用程序,每个视图都是自己的视图控制器。我正在使用以下方法切换视图。

TableViewSelect *tableview = [[TableViewSelect alloc] initWithNibName:nil bundle:nil];
[self presentViewController: tableview animated:YES completion:NULL];

我在另一个问题中被告知,这会导致新视图显示在上一个视图上,但不会释放内存。因此,当用户翻转视图时,内存总是在增长。即内存泄漏。任何人都可以告诉我如何在离开视图时切换内存被释放的视图。

由于

2 个答案:

答案 0 :(得分:1)

在某些时候,建议:

//in TableViewSelect class on some action
[self dismissViewControllerAnimated:YES completion:nil];

另外......取决于你的流程,但是你说你有以下课程:

  1. AppDelegate
  2. ViewController
  3. FirstVC
  4. SecondVC
  5. ThirdVC
  6. 说:

    • AppDelegate的rootViewController是ViewController
    • ViewController介绍FirstVC
    • FirstVC介绍SecondVC

    所以现在......你已经SecondVC并且需要再次显示FirstVC,然后在这种情况下,为了节省记忆,你需要解雇{{1} }}

    但是......如果你有甚至远程的东西:

    • SecondVC - > FirstVC - > SecondVC返回) - > ThirdVC

    然后你用FirstVC做得更好,因为这似乎是一种潜在的记忆力。

答案 1 :(得分:0)

如果您只想一次显示一个视图,则可以执行以下操作...

 @property (nonatomic, strong) UIVIewController *currentViewController;

- (void)presentViewController:(UIViewController *)viewControllerToPresent animated:    (BOOL)animated completion:(void (^)(void))completion {
        if (self.currentViewController != nil) {
            [self.currentViewController dismissViewControllerAnimated:animated completion:^{
                self.currentViewController = viewControllerToPresent;
                [super presentViewController:viewControllerToPresent animated:animated completion:completion];
            }];
        } else {
            self.currentViewController = viewControllerToPresent;
            [super presentViewController:viewControllerToPresent animated:animated completion:completion];
        }
}