了解IOS UIViewController生命周期

了解IOS UIViewController生命周期

您能否解释一下如何正确地管理UIViewController生命周期?

特别是,我想知道如何使用InitializeViewDidLoadViewWillAppearViewDidAppearViewWillDisappearViewDidDisappearViewDidUnloadDisposeMono Touch中的方法UIViewController班级,等级。


红糖糍粑
浏览 762回答 3
3回答

噜噜哒

这是最新的IOS版本(用Xcode 9.3,SWIFT 4.1)。下面是使UIViewController完成。loadView()loadViewIfNeeded()viewDidLoad()viewWillAppear(_ animated: Bool)viewWillLayoutSubviews()viewDidLayoutSubviews()viewDidAppear(_ animated: Bool)viewWillDisappear(_ animated: Bool)viewDidDisappear(_ animated: Bool)让我来解释所有这些阶段。1.&nbsp;loadView此事件创建控制器管理的视图。只有在以编程方式创建视图控制器时才调用它。这使得它成为在代码中创建视图的好地方。如果子类没有使用nib,那么子类应该在这里创建它们的自定义视图层次结构。不应该直接打电话。2.&nbsp;loadViewIfNeeded如果是当前的视图viewController尚未设置,则此方法将加载视图,但请记住,这仅在IOS>=9.0中可用。因此,如果您支持IOS<9.0,那么不要期望它会出现在图片中。如果尚未设置视图控制器的视图,则加载该视图控制器的视图。3.&nbsp;viewDidLoad这个viewDidLoad事件只在视图被创建并加载到内存中时调用,但尚未定义视图的界限。这是初始化视图控制器将要使用的对象的好地方。在加载视图后调用。对于在代码中创建的视图控制器,这是后加载视图.对于从NIB中未存档的视图控制器,这是在设置视图之后。4.&nbsp;viewWillAppear此事件通知viewController每当视图出现在屏幕上时。在此步骤中,视图具有已定义但未设置方向的界限。当视图即将变得可见时调用。默认什么都不做。5.&nbsp;viewWillLayoutSubviews这是生命周期中最后确定界限的第一步。如果您没有使用约束或自动布局,您可能希望在这里更新子视图。这仅在IOS>=5.0中可用。因此,如果您支持IOS<5.0,那么不要期望它出现在图片中。在调用视图控制器的layoutSubview方法之前调用。子类可以根据需要实现。缺省值是NOP。6.&nbsp;viewDidLayoutSubviews此事件通知视图控制器已设置子视图。在设置子视图之后,对其进行任何更改都是一个很好的地方。这仅在IOS>=5.0中可用。因此,如果您支持IOS<5.0,那么不要期望它出现在图片中。在调用视图控制器的layoutSubview方法之后调用。子类可以根据需要实现。缺省值是NOP。7.&nbsp;viewDidAppear这个viewDidAppear事件在屏幕上显示视图后触发。这使得从后端服务或数据库获取数据成为一个很好的地方。当视图完全转换到屏幕上时调用。默认什么都不做8.&nbsp;viewWillDisappear这个viewWillDisappear事件在呈现视图时触发viewController即将消失、解散、掩盖或隐藏在他人后面viewController..这是一个很好的地方,您可以限制您的网络调用,使计时器无效,或者释放绑定到它的对象。viewController.当视图被取消、覆盖或以其他方式隐藏时调用。9.&nbsp;viewDidDisappear这是生命周期的最后一步,任何人都可以在呈现视图之后触发此事件。viewController已经消失了,被解雇了,被掩盖了,或者被隐藏了。在视图被驳回、覆盖或以其他方式隐藏后被调用。默认什么都不做现在按.苹果在实现此方法时,应记住调用super实施这一具体方法。如果子类UIViewController,则必须调用此方法的超级实现,即使您没有使用NIB。(为了方便起见,默认的init方法将为您做到这一点,并为这两个方法参数指定nil。)在指定的NIB中,File的所有者代理应该将其类设置为视图控制器子类,并将视图出口连接到主视图。如果使用nib名称调用此方法,则该类‘-loadView方法将尝试加载名称与视图控制器类相同的NIB。如果实际上不存在这样的nib,则必须调用-setView:以前-view调用,或覆盖-loadView方法以编程方式设置视图。希望这能帮上忙。谢谢。更新@ThomasW指出内部评论viewWillLayoutSubviews和viewDidLayoutSubviews在加载主视图的子视图时,例如当加载表视图或集合视图的单元格时,也会调用。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

iOS