【问题标题】:Why performSegueWithIdentifier creates always a new instance?为什么 performSegueWithIdentifier 总是创建一个新实例?
【发布时间】:2015-05-19 22:41:39
【问题描述】:

我有 3 个视图控制器:containerViewControllerquestionViewControlleranswerViewController

如何在不从视图控制器创建新实例的情况下交换问题和答案?因此,如果创建了一个,请使用那个。

通常我会像这样在它们之间交换:

containerViewController!.performSegueWithIdentifier("question", sender:self) 

但这总是会创建一个新实例。

【问题讨论】:

  • 您是否有特殊原因不希望它创建新实例?虽然这是一种浪费的做事方式,但它是非常标准的行为,UIKit 会自行清理以降低内存使用率
  • 不是那么重要,但是在question Table ViewController 你在图片右侧看不到的东西,我需要做一些清理和deinit questionTableViewController 没有被调用,你知道为什么吗?
  • 如果deinit 没有被调用,很可能是因为您在某处持有对 ViewController 的强引用。还有更好的地方可以整理你的viewController,比如viewWillDisappear
  • @chedabob 一个数组持有引用,而不是 deinit 被调用

标签: ios storyboard segue


【解决方案1】:

是的,它总是会创建一个新实例。毫无疑问。因为该命令等于创建一个新对象并推送它(或呈现它)。

有很多方法可以完成它。就我而言,我通常使用一个按钮创建 questionViewController,然后通过该按钮,它将显示 answerViewController。 answerViewController 将有一个关闭按钮。我想你可以试试。

【讨论】:

  • 我需要以编程方式执行此操作,并且按 back 恢复相同的 questionViewController 也很重要
  • 是的。使用我的方式,然后我们“返回”按钮关闭 answerViewController,您可以返回完全相同的 questionViewController。
  • 啊,好的,所以按back 不应调用performSegueWithIdentifier,但应从容器中删除answerViewController
猜你喜欢
  • 1970-01-01
  • 2018-08-31
  • 2018-08-26
  • 1970-01-01
  • 1970-01-01
  • 2011-11-21
  • 2016-12-24
  • 2011-02-12
  • 1970-01-01
相关资源
最近更新 更多