【问题标题】:ViewdidLoad called every time每次调用 ViewdidLoad
【发布时间】:2016-05-02 01:33:30
【问题描述】:

为什么每次我在情节提要中使用 show push 更改嵌入 UINavigationController 的 UIViewController 时都会调用 ViewDidLoad?

它不是只被调用一次,或者我必须以编程方式检查它是否已经加载?

另一个相关问题:

在 StackOverflow 中找到的以下最佳实践中,用户正在谈论 init 方法,但如果我的 ViewController 由情节提要加载,我必须在哪里初始化我的属性?

最佳实践

记住不要在 viewDidLoad 中进行视图控制器初始化。这是一个常见的错误。对于在加载视图控制器时应该只发生一次的事情,请在控制器的 init 方法之一中执行。

【问题讨论】:

  • ViewDidLoad 在您使用 segue 推送时调用,因为当 segue 执行时,它会创建目标 viewController 的新对象并将其推送到导航堆栈,这就是每次调用 viewDidLoad 的原因
  • @C_X 为什么每次都调用init方法?
  • 因为每次创建新实例,

标签: ios swift uiviewcontroller storyboard


【解决方案1】:

viewDidLoad 在加载 viewController 的视图时第一次被调用(通过访问视图控制器的视图或通过模态演示或推送演示呈现视图控制器)。一旦视图控制器被加载,viewDidLoad 将不会被再次调用。如果你想使用 init 方法,你需要使用 initWithCoder 来处理来自 storyboard 的东西。

【讨论】:

  • viewDidLoad 在第一次加载视图控制器的 view 时被调用。在视图控制器初始化后的一段时间内,由于多种原因可能会发生这种情况。不只是出现时。
  • 即使我也提到过。听起来不像吗?我的意思是说,无论表现形式如何,viewDidLoad 仅在加载 VC 时才被调用。
  • 您似乎在说 viewDidLoad 仅在呈现视图控制器时才被调用。我说那不是真的。 viewDidLoad 可以被调用,即使你从不展示视图控制器。在加载 view 时调用它。只需访问 view 属性即可加载视图。
  • 所以每次我推送一个新的 UIViewController 时都会创建一个新的实例?
  • 您可以创建 ViewController 的实例,并且如果您不提供视图控制器或访问视图属性,则永远不会调用 viewDidLoad。此外,您不能进行所有初始化,例如在 init() 中添加子视图,因为尚未创建视图。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-08-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多