iOS-VC生命周期

在一个vc中写入以下函数:

- (void)loadView{
    [super loadView];
    NSLog(@"loadView");
}

- (void)viewDidLoad {
    [super viewDidLoad];
    NSLog(@"viewDidLoad");
    self.view.backgroundColor = UIColorFromHex(0x009966, 1.0);
}

- (void)viewWillAppear:(BOOL)animated{
    [super viewWillAppear:animated];
    NSLog(@"viewWillAppear");
}

- (void)viewDidAppear:(BOOL)animated{
    [super viewDidAppear:animated];
    NSLog(@"viewDidAppear");
}

- (void)viewWillDisappear:(BOOL)animated{
    [super viewWillDisappear:animated];
    NSLog(@"viewWillDisappear");
}

- (void)viewDidDisappear:(BOOL)animated{
    [super viewDidDisappear:animated];
    NSLog(@"viewDidDisappear");
}

- (void)dealloc{
    NSLog(@"dealloc");
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    
}

进入vc的输出如下:

  loadView

  viewDidLoad

  viewWillAppear

  viewDidAppear

退出vc的输出如下:

  viewWillDisappear

  viewDidDisappear

  dealloc




### 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、付费专栏及课程。

余额充值