【问题标题】:Memory buildup with presentViewController使用 presentViewController 建立内存
【发布时间】:2014-05-20 21:07:08
【问题描述】:

我有一个按钮单击处理程序,它保存一个对象,然后呈现另一个控制器。我的问题是每次点击分配的内存都会增加。

  if (success) {
      ALRollsViewController *rollsController = [[UIStoryboard storyboardWithName:@"Entry" bundle:nil]instantiateViewControllerWithIdentifier:@"RollsController"];
      rollsController.camera= selectedCamera;
      [self presentViewController:rollsController
                         animated:YES
                       completion:nil];
  }

如果我使用dismissViewControllerAnimated 而不是presentViewController:rollsController 则没有积聚。我需要以某种方式释放实例化的控制器吗?

【问题讨论】:

  • 你要放弃那些呈现的视图控制器吗?
  • 不,不确定发生在哪里

标签: objective-c ios7 memory-leaks presentviewcontroller


【解决方案1】:

你期待什么? 每次单击都会实例化一个新的 UIStoryboard 实例。这里的命名约定是,以对象名称(不带前缀的名称)开头的方法返回一个新创建的对象实例。

查看和比较NSArray arrayWith...NSString stringWith...

另外,您每次都需要一个视图控制器的实例来呈现。 两个实例都被保留,直到视图控制器被解除。 (我不是 100% 肯定 UIStoryboard 实例会保留那么长时间,但是新呈现的视图控制器会吃掉你的堆和一些堆栈。)

【讨论】:

  • 哎哟。大多数这些东西对我来说就像巫毒一样,所以我想我希望呈现的视图会自动被忽略。我显然错了。感谢您的命名约定。我不确定我在哪里关闭了提供的控制器
  • 是的,这是有原因的。将同一个视图控制器类的大量实例相互堆叠并没有错——如果这是你作为程序员想要做的。显然,您不会忘记关闭不再需要的那个。
猜你喜欢
  • 2023-04-10
  • 1970-01-01
  • 1970-01-01
  • 2015-08-21
  • 1970-01-01
  • 2011-05-22
  • 2016-11-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多