当前位置: 首页 > news >正文

UIViewController生命周期

UIViewController生命周期UIViewController的生命周期本质上就是一个页面从“创建 → 显示 → 消失 → 销毁”的全过程。开发中最常用的几个方法一、整体调用顺序通常一个页面出现时init ↓ loadView ↓ viewDidLoad ↓ viewWillAppear ↓ viewWillLayoutSubviews ↓ viewDidLayoutSubviews ↓ viewDidAppear页面离开时viewWillDisappear ↓ viewDidDisappear ↓ dealloc二、每个方法的作用1.init-(instancetype)init调用时机对象刚调用时调用作用初始化数据常用于初始化属性创建数据数组设置默认值注意view还没创建不能操作界面2.loadView-(void)loadView调用时机第一次访问self.view时调用作用创建控制器的根视图系统自动创建一个view什么时候重写完全代码创建UI不用 storyboard/xib注意如果通过覆写loadview方法创建了自定义UI需要牢记将view视图设置到视图层级的根上确保视图正在被其他视图控制器共享不要调用[super loadView]self.viewxxx;一般开发不建议重写loadview3.viewDidLoad-(void)viewDidLoad调用时机view加载完成后调用特点整个生命周期只调用一次适合做什么创建UI添加控件Masonry布局注册cell网络请求初始化页面数据4.viewWillAppear-(void)viewWillAppear:(BOOL)animated调用时机当视图层级已经准备好且视图即将被放入视图窗口时此方法会被调用。在即将展示视图控制器或之前入栈modal或者其他的视图控制器弹出时这种情况就会发生。在这个时刻过渡动画还未开始视图对终端用户也是不可见的。不要启动任何视图动画因为没有任何作用特点每次页面出现时都会调用适合做什么刷新数据更新UI隐藏导航栏修改状态栏注意页面还没真正显示动画还没开始5.viewDidAppear-(void)viewDidAppear:(BOOL)animated调用时机当视图在视图窗口展示出来且过渡动画完成后此方法会被调用。因为动画会耗费约300毫秒所以对比viewWillAppear和viewDidLoadviewDidAppear和viewWillDisappear之间的时间差可能会比较大。适合做什么开始动画播放视频开启定时器开始监听6.viewWillDisappear-(void)viewWillDisappear:(BOOL)animated调用时机该方法表示视图将要从屏幕上隐藏起来。这可能是因为其他视图控制器想要接管屏幕或该视图控制器将要出栈。你可能会注意到当此方法被调用时没有办法能直接够判断这是由当前视图控制器要出栈还是其他视图控制器入栈导致的。适合做什么暂停动画停止定时器收起键盘保存数据7.viewDidDisappear-(void)viewDidDisappear:(BOOL)animated调用时机页面已经消失适合做什么停止视频移除通知释放大资源8.dealloc-(void)dealloc调用时机控制器被释放时适合做什么移除通知观察者释放查看是否内存泄漏-(void)dealloc{[[NSNotificationCenter defaultCenter]removeObserver:self];}三、loadView和viewDidLoad区别loadView负责“创建 view”viewDidLoad负责“view 创建完成后的初始化”控制器里有一个最重要的属性property(nonatomic, strong) UIView *view;UIViewController 的工作管理一个根view当页面要显示时如果view不存在 ↓ 先创建view ↓ 再进行初始化 ↓ 再显示页面于是loadView负责创建viewviewDidLoad负责view创建完成后的处理总结UIViewController生命周期(void)initialize函数并不会每次创建对象都调用只有在第一次初始化的时候才会调用再次创建将不会调用initialize方法。init方法和initCoder方法相似知识被调用的环境不一样。如果用代码初始化会调用init方法从nib文件或者归档(xib、storyboard)进行初始化会调用initCoder。initCoder是NSCoding协议中的方法NSCoding是负责编码解码归档处理的协议。loadView是开始加载view的起始方法除非手动调用否则在ViewController的生命周期中只调用一次。viewDidLoad是我们最常用的方法类成员对象和变量的初始化我们都会放在这个方法中。在创建类后无论视图展现还是消失这个方法也只会在布局是调用一次。viewWillAppear:(BOOL)animated方法 是在视图将要展现出来的时候调用。viewWillLayoutSubviews方法是在将要布局子视图的时候调用。viewDidLayoutSubviews方法是在子视图布局完成后调用。viewDidAppear:(BOOL)animated方法是视图已经出现。viewWillDisappear:(BOOL)animated方法是视图即将消失。viewDidDisappear:(BOOL)animated视图已经消失。deallocViewController被释放时调用
http://www.gsyq.cn/news/1385112.html

相关文章:

  • 构建高安全本地智能家居:基于MQTT over TLS与双向认证的实践
  • 2026年老面小笼包面粉怎么挑?五大品牌发酵力与出品表现横评 - 科技焦点
  • ai-agent框架spring ai alibaba (三)外部调用II-1 MCP
  • 保姆级教程:Windows系统下Arcgis 10.2从下载、安装到汉化一次搞定(附常见License启动失败解决方案)
  • 别被忽悠了!2026亲测靠谱的AI论文网站|避坑精选版
  • CapabilityAccessManager.db-wal异常占用解决办法
  • 做老面小笼包怕翻车?2026五大面粉品牌品控稳定性与口碑实测 - 科技焦点
  • DeepSeek重构模式推荐:为什么92%的团队在RAG升级中选错模式?3个被忽略的上下文耦合指标
  • 【会议征稿通知 | 绵阳师范学院主办 | IET出版 | EI 、Scopus稳定检索】第五届电力工程与电气技术学术会议(ICPEET 2026)
  • 现在不看就亏!2024Q2语音合成价格窗口期将关闭:3类企业正紧急切换供应商
  • 【深度解析】AI Coding 模型竞速:从 Claude Mythos 安全编码到 GPT-5.6 传闻,如何落地代码审查智能体
  • 为arm7边缘计算场景选择稳定可靠的大模型API聚合平台
  • 探索Windows 11 LTSC系统商店恢复的模块化解决方案:智能部署实战
  • 可解释AI新突破:基于局部帕累托最优的模型解释框架
  • 告别数据饥荒:用PyTorch手把手实现原型网络(Prototypical Networks)做电影评论情感分类
  • 书匠策AI到底有多懂毕业生?拆解它的毕业论文功能,看完你会谢我
  • 一文吃透Linux防火墙:firewalld+SELinux完整防护实操指南
  • TP、FP、FN、TN 详解
  • 山东大学软件学院项目实训-创新实训-计科智伴 组周报(第五周)—— 错题诊断 Agent 落地、course-ai 接通大模型 + RAG + 多 Agent 调度、登录与对话全链路前端化
  • HDI与普通PCB的叠层差异
  • 为什么选择Noto字体:告别“豆腐块“困扰的全球字体解决方案
  • HDR视频制作避坑指南:HLG和PQ到底怎么选?从广电直播到流媒体的实战解析
  • VideoDownloadHelper 插件深度解析:Chrome 视频下载架构设计与技术实现
  • 15事件警报:告警机制的设计案例
  • 炉石传说脚本终极指南:智能自动对战助手完整教程
  • WaveTools深度解析:鸣潮玩家的专业性能调优与数据管理实战指南
  • 高效实现百度网盘链接解析:技术架构与API调用深度解析
  • AMD Ryzen终极调试指南:用SMUDebugTool解锁隐藏性能的完整教程
  • 性能采集与问题定位工具链实战
  • AI时代两大高决策行业的社交营销进化 | 第十届社交媒体风向大会数码家电与汽车分论坛 - 资讯快报