在iOS中,segue是否实例化了新的待用视图控制器?或者它已经实例化了吗?

时间:2016-12-13 00:35:30

标签: ios storyboard segue

例如,假设我有一个UIViewController的常规子类,并且我已将此控制器视图中包含的控件对象连接到segue操作,该操作将让另一个视图控制器的视图进入视图...

足够简单。

当我在常规子类UIViewController上调用名为prepare(for:sender :)的方法时,此时,我关注的是要使用的新视图控制器,其视图将弹出屏幕..这是新的视图控制器已经在某处实例化了?

我相信答案是肯定的,因为在prepare(for:sender :)函数中,我为segue.destination(这是目标视图控制器)设置了一个引用,当我打印该引用时,它似乎是一个地方已经在内存中告诉我新的视图控制器已经实例化了。

任何人都可以确认/否认这个新的视图控制器(从故事板创建)已经实例化,或者用更简单的术语来表达吗?

由于

2 个答案:

答案 0 :(得分:2)

Apple的文档说,

  

当故事板运行时检测到自定义segue时,它会创建一个类的新实例,使用视图控制器对象配置它,要求视图控制器源准备segue,然后执行segue。

https://developer.apple.com/reference/uikit/uistoryboardsegue

因此,在将prepareForSegue发送到源UIViewController之前,目标UIViewController由segue实例化。

所以要直接回答你的问题,那就是"是的"两个问题:

  

在iOS中,segue是否实例化了新的待用视图控制器?

是的,segue会实例化目标视图控制器。

  

或者它已经实例化了吗?

是的,当你的prepareForSegue被调用时,它已经被实例化 - 立即预先。

更新:正如@Jeffery_Thomas所评论的那样,通过向目标视图控制器的NSLog()添加init行,可以轻松演示。

答案 1 :(得分:1)

  

任何人都可以确认/否认这个新的视图控制器(从故事板创建)已经实例化了,

是。这就是意味着触发segue的原因。触发的segue 作业是实例化目标视图控制器,并且prepare存在,以便您可以配置该实例