Navigation页面生命周期

Navigation作为路由容器,其生命周期承载在NavDestination组件上,以组件事件的形式开放。

其生命周期大致可分为三类,自定义组件生命周期、通用组件生命周期和自有生命周期。其中,aboutToAppearaboutToDisappear是自定义组件的生命周期(NavDestination外层包含的自定义组件),OnAppearOnDisappear是组件的通用生命周期。剩下的六个生命周期为NavDestination独有。

  • aboutToAppear:在创建自定义组件后,执行其build()函数之前执行(NavDestination创建之前),允许在该方法中改变状态变量,更改将在后续执行build()函数中生效。
  • onWillAppear:NavDestination创建后,挂载到组件树之前执行,在该方法中更改状态变量会在当前帧显示生效。
  • onAppear:通用生命周期事件,NavDestination组件挂载到组件树时执行。
  • onWillShow:NavDestination组件布局显示之前执行,此时页面不可见(应用切换到前台不会触发)。
  • onShown:NavDestination组件布局显示之后执行,此时页面已完成布局。
  • onWillHide:NavDestination组件触发隐藏之前执行(应用切换到后台不会触发)。
  • onHidden:NavDestination组件触发隐藏后执行(非栈顶页面push进栈,栈顶页面pop出栈或应用切换到后台)。
  • onWillDisappear:NavDestination组件即将销毁之前执行,如果有转场动画,会在动画前触发(栈顶页面pop出栈)。
  • onDisappear:通用生命周期事件,NavDestination组件从组件树上卸载销毁时执行。
  • aboutToDisappear:自定义组件析构销毁之前执行,不允许在该方法中改变状态变量。
### iOS UINavigationController 生命周期详解 #### 导航控制器初始化与创建 当创建 `UINavigationController` 实例时,通常会指定根视图控制器作为参数。这一步骤通过调用带有适当参数的方法完成[^1]: ```objectivec UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:controller]; ``` #### 视图加载过程 一旦导航控制器被加入到窗口层次结构中,其内部机制将触发一系列事件来准备并展示界面。具体来说: - **init**: 初始化阶段,在此期间对象分配内存空间并设置初始属性值。 - **loadView**: 加载视图资源文件或构建基础视图组件;如果未手动实现,则默认为空操作。 - **viewDidLoad**: 当视图首次完全加载完毕后执行该回调函数,可用于配置子控件或其他逻辑处理。 这些步骤属于 UIViewController 的一部分,而 UINavigationController 继承自前者因此也会经历同样的流程[^5]。 #### 推送新页面的过程 每当向栈顶压入新的 view controller (即 "push") 或者弹出当前顶部的 view controller ("pop"), 都会引起如下变化: - **viewWillAppear:** 即将显示之前通知宿主 VC 准备工作; - **viewDidAppear:** 显示完成后立即调用本方法告知已成功呈现给用户查看; - **viewWillDisappear:** 正在消失前最后一次机会做些清理动作; - **viewDidDisappear:** 完全不可见之后最终确认状态改变结束。 以上四个钩子函数成对出现分别对应于进入前台/后台两种场景下的不同时间节点上发生的活动[^3]。 #### 销毁释放环节 随着应用程序运行过程中不断切换不同的 scene 场景以及可能存在的内存压力情况,某些不再使用的 viewController 及其所关联的对象会被标记为待回收项进而销毁掉以节省系统开销。此时涉及到两个重要时刻点: - **viewWillUnload / viewDidUnload** : 这是在较旧版本(iOS6以前)用于指示即将卸载视图及其相关联的数据模型实例化对象;现代iOS SDK已经废弃了这两个API因为自动布局和 ARC 技术使得它们变得多余。 - **dealloc**: 对象析构期,意味着整个生命周期走到尽头,所有持有强引用关系都将解除从而允许垃圾收集器安全地清除这部分占用的空间。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值