【问题标题】:ViewController being held in memoryViewController 被保存在内存中
【发布时间】:2014-04-18 22:44:26
【问题描述】:

我使用以下代码在视图控制器之间切换..(工作正常)顺便说一下,我也有很多视图控制器,我不只是在 2 之间来回切换

NSString * storyboardName = @"Main";
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:storyboardName bundle: nil];

MyTableViewVC *detailView = (MyTableViewVC *)[storyboard instantiateViewControllerWithIdentifier:@"MyTableViewVC"];

    //pass data through to VC

[self presentViewController:detailView animated:NO completion:nil];

当我在视图控制器之间转换时,我看到内存使用量在攀升

所以我做了一些研究并意识到我并没有解雇以前的视图控制器。我在调用presentViewcontroller: 之前使用了以下代码[self dismissViewControllerAnimated:NO completion:nil];(之后我也尝试过使用它),但它不起作用。如果我在没有发生任何事情后使用它.. 在收到以下警告之前使用它

线程 1:EXC_BAD_ACCESS(code=1.. blah blah 如果您需要其余部分,请告诉我

我也尝试过做这样的事情..

[detailView presentViewController:detailView animated:NO completion:nil];
[self dismissViewControllerAnimated:NO completion:nil];

我做错了什么?

【问题讨论】:

  • 您是否在情节提要的 MyTableViewVC 中添加了标识符?还是您当前的视图控制器包括 uinavigationcontroller ?
  • 是的,就像我说的这段代码工作正常。我只是在关闭视图控制器时遇到问题,这段代码是从中调用的
  • 记住如果你删除了旧的 VC,当你删除这些时,你将无法转到以前的 VC...跨度>
  • @FahimParkar 所以我应该只关心释放堆栈中最高的视图控制器吗?
  • @FahimParkar 我做了.. 我的问题中的第一块代码NSString * storyboardName = @"Main"; UIStoryboard *storyboard = [UIStoryboard storyboardWithName:storyboardName bundle: nil]; MyTableViewVC *detailView = (MyTableViewVC *)[storyboard instantiateViewControllerWithIdentifier:@"MyTableViewVC"]; //将数据传递给VC [self presentViewController:detailView animated:NO completion:nil];

标签: ios memory-management uiviewcontroller presentviewcontroller


【解决方案1】:

以下是从导航堆栈中删除 VC 的代码。

NSMutableArray *navigationArray = [[NSMutableArray alloc] initWithArray: self.navigationController.viewControllers];

// [navigationArray removeAllObjects];    // This is just for remove all view controller from navigation stack.
[navigationArray removeObjectAtIndex: 2];  // You can pass your index here
self.navigationController.viewControllers = navigationArray;
[navigationArray release];

但是请注意, 这样做会导致您在从堆栈中删除前一个 VC 时转到前一个 VC。

当您抱怨内存问题时我会再次说 DOUBLE CHECK 代码并调查内存使用率更高的地方。如果不需要该对象,请释放该对象,以免出现内存问题。

【讨论】:

  • 我不确定如何使用此代码?当我的应用首次启动时,我是否将所有视图控制器放入一个数组中?
  • @user3550397 : VC 在数组中?您可以发布您正在使用的代码吗?
  • 我的意思是我不明白在哪里添加你的代码?我没有使用导航视图控制器?
  • @user3550397 : 如果不是导航视图控制器,那么您将如何从一个 VC 转到另一个 VC...向我们展示您如何从一个 VC 转到另一个 VC...
【解决方案2】:

如果你想回到根视图控制器,你必须使用这个代码。

[self.navigationController popToRootViewControllerAnimated:YES];

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-02
    • 2016-01-21
    • 2011-11-23
    • 1970-01-01
    相关资源
    最近更新 更多