Ios 为什么performsguewithidentifier总是创建一个新实例?
我有3个视图控制器:Ios 为什么performsguewithidentifier总是创建一个新实例?,ios,storyboard,segue,Ios,Storyboard,Segue,我有3个视图控制器:containerViewController,questionViewController,answerViewController 在不从视图控制器创建新实例的情况下,如何交换问题和答案?因此,如果创建了一个,请使用该文件 通常我会这样在他们之间交换: containerViewController!.performSegueWithIdentifier("question", sender:self) 但这总是会创建一个新实例。是的,它总是会创建一个新实例。毫无疑
containerViewController
,questionViewController
,answerViewController
在不从视图控制器创建新实例的情况下,如何交换问题和答案?因此,如果创建了一个,请使用该文件
通常我会这样在他们之间交换:
containerViewController!.performSegueWithIdentifier("question", sender:self)
但这总是会创建一个新实例。是的,它总是会创建一个新实例。毫无疑问。因为该命令等于创建一个新对象并推送它(或呈现它)
有很多方法可以解决这个问题。在我的例子中,我通常使用一个按钮创建questionViewController,通过该按钮,它将显示answerViewController。answerViewController将有一个按钮可关闭。我想你可以试试 我需要以编程的方式进行操作,而且返回相同的
questionViewController
按back
yes也很重要。用我的方式,和我们的“后退”按钮关闭answerViewController,你可以回到完全相同的questionViewController。啊,好的,因此,按back
不应该调用performsguewithidentifier
,而是应该从容器中删除answerViewController
,您不想让它创建新实例有什么特殊原因吗?虽然这是一种浪费的做事方式,但这是相当标准的行为,UIKit会自行清理以降低内存使用率。这并不重要,但在question
TableViewController
图片右侧看不到的地方,我需要做一些清理,并且questionTableViewController
的deinit
没有被调用,你知道为什么吗?如果没有调用deinit
,很可能是因为你在某处保留了对ViewController的强引用。还有更好的地方可以整理您的viewController,例如viewwilldiscover
@chedabob数组持有引用,而不是deinit
被调用