iOS最佳实践:视图生命周期该干什么

iOS开发:第一个iOS程序分析——AppDelegate.h文件和视图View、视图控制器ViewController 在上一篇文章iOS开发:第一个iOS程序分析——代理,生命周期函数 阅读详情

1、init

Allocating critical data structures required by your view controller

不要出现创建view的代码。良好的设计,在init里应该只有相关数据的初始化,而且这些数据都是比较关键的数据。init里不要掉self.view,否则会导致viewcontroller创建view。(因为view是lazyinit的)。

2、loadView

Creating your view objects

只初始化view,一般用于创建比较关键的view如tableViewController的tabView,UINavigationController的navgationBar,不可掉用view的getter(在掉super loadView前),最好也不要初始化一些非关键的view。如果你是从nib文件中创建的viewController在这里一定要首先调用super的loadView方法,但建议不要重载这个方法。

3、viewDidLoad

Allocating or loading data to be displayed in your view

这时候view已经有了,最适合创建一些附加的view和控件了。有一点需要注意的是,viewDidLoad会调用多次(viewcontroller可能多次载入view,参见图2)。

4、viewWillAppear 这个一般在view被添加到superview之前,切换动画之前调用。在这里可以进行一些显示前的处理。比如键盘弹出,一些特殊的过程动画(比如状态条和navigationbar颜色)。

5、viewDidAppear 一般用于显示后,在切换动画后,如果有需要的操作,可以在这里加入相关代码。

6、viewDidUnload

Releasing references to view objects

Releasing data that is not needed when your view is not displayed

这时候viewController的view已经是nil了。由于这一般发生在内存警告时,所以在这里你应该将那些不在显示的view释放了。比如你在viewcontroller的view上加了一个label,而且这个label是viewcontroller的属性,那么你要把这个属性设置成nil,以免占用不必要的内存,而这个label在viewDidLoad时会重新创建。

7、dealloc

Releasing critical data structures required by your view controller

六、几点备注:

1、按结构可以对iOS的所有ViewController分成两类:

1)、主要用于展示内容的ViewController,这种ViewController主要用于为用户展示内容,并与用户交互,如UITableViewController,UIViewController。

2)、用于控制和显示其他ViewController的ViewController。这种ViewController一般都是一个ViewController的容器。如UINavigationController,UITabbarController。它们都有一个属性:viewControllers。其中UINavigationController表示一种Stack式结构,push一个ViewController或pop一次,因此后一个ViewController一般会依赖前一个ViewController。而UITabbarController表示一个Array结构,各个ViewController是并列的。

第一种ViewController会经常被继承,用来显示不同的数据给用户。而第二种很少被继承,除非你真的需要自定义它。

 

2、当view被添加其他view中之前时,会调用viewWillAppear,而之后会调用viewDidAppear。

当view从其他view中移出之前时,会调用viewWillDisAppear,而之后会调用viewDidDisappear。

当view不在使用,而且是disappeared,受到内存警告时,那么viewController会将view释放并将其指向nil。

 

3、由于Controller加载View时,会自动将一些View对象指向其对应的IBOutlet变量。

所以当view被卸载时我们必须在viewDidUnload将这些变量release掉,ViewController不会自动做这件事。

具体做法是将变量设置为空,(注意和dealloc中将变量release的区别)注意此时Controller的view属性是空的。

数据质量管理的一些思考 背景 在近期的项目当中,我们为客户落地实施了数据资产平台。随后,在数据平台中接入了客户子公司的一个业务系统的明细数据。客户希望在我们的数据平台上通过数据探索和数据分析,来挖掘一些业务价值和业务创新点。 当我们拿到数据开始进行一些初步探索的时候,发现导入平台的数据质量存在一定的问题:例如一些用于数据分析的关键字段的值为空、一些本应该有主从关系的数据对应不上、数据分类混乱等。这些问题直接影响到了对... 阅读详情

相关推荐

西门子200 SMART与博图WinCC通讯全攻略:从PC Access到S7-200协议避坑指南

本文详细解析了西门子S7-200 SMART PLC与博途WinCC上位机通讯的两种主流方案:基于PC Access SMART的OPC通讯和利用博途内置S7-200协议驱动直连。文章深入对比了两种架构的优缺点、配置步骤,并提供了从网络层到软件层的深度排错指南与性能优化建议,帮助工程师高效、稳定地实现系统集成。

gg901的博客 810

iOS视图控制器的生命周期及各阶段的作用

iOS视图控制器(UIViewController)的生命周期是指从它被创建到最终被销毁的过程中所经历的一系列阶段。每个阶段都有其特定的作用和执行时机,这些阶段和作用对于开发高效、稳定的iOS应用至关重要。

Good_tea_h的博客 1260

用PLECS搞定三相逆变器电流环:从传递函数推导到PI参数整定的保姆级教程

本文提供了一份详细的PLECS教程,指导如何从传递函数推导到PI参数整定,实现三相逆变器电流环的闭环控制。通过坐标变换、控制器设计和仿真验证等步骤,帮助工程师快速掌握电流环控制技术,提升电力电子系统的稳定性和可靠性。

weixin_27102543的博客 399

IOS 初级开发入门教程(三)探究应用及视图的生命周期变化

导读 操作系统都会根据应用的生命周期状态来管理和处理逻辑,这一点在Android开发上现的就已经非常好了,耳熟能详的就是应用状态影响内存回收级别和活动的生命周期。同样,在IOS上也会充分利用应用的视图的生命周期来进行管理应用。首先,我们先知道IOS应用在程序中的五种状态及其变化,然后再去看IOS工程中有一个AppDelegate的类来动手验证,它是应用程序的委托对象,(类似Andro

csdn_aiyang的博客 4757

ABAP代码检查(Code Review)

1、SLIN 扩展程序检查 也可通过(SE38工具栏->检查-扩展程序检查) 进入 2、ATC 检查 通过<SE38菜单栏-检查-ABAP测试主控室> 或事物代码SCI, 支持自定义检查变式 SCI可以配置检查变式满足特殊需求,配置对象集用于批量检查 3、通过ABAP测试主控室实现统一管理,定期检查作业和监控功能(事务代码ATC) 参考 SLIN...

u012232542的博客 6063

Telegram 担保交易系统搭建指南:安全可靠的交易流程实现

本文介绍了基于Telegram Bot API搭建担保交易系统的完整方案。该系统通过第三方资金托管机制解决买卖双方信任问题,支持"付款后发货"和"收货后放款"的交易流程。文章详细阐述了系统架构设计,包括Telegram Bot交互层、后端业务逻辑层、数据库层和支付接口层。核心实现步骤涵盖:1)订单创建模块处理交易信息;2)支付处理模块集成Stripe Escrow实现资金托管;3)确认收货模块完成资金划转。系统采用PostgreSQL存储交易数据,并通过FastAPI

jingpide9527的博客 1948

iOS视图生命周期解析

IOS视图生命周期解析视图控制对象通过alloc和init来创建,但是视图控制对象不会在创建的那一刻就马上创建相应的视图,而是等到需要使用的时候才通过调用loadView来创建,这样的做法能提高内存的使用率。iOS视图控制对象生命周期 init-初始化程序 viewDidLoad-加载视图 viewWillAppear-UIViewController对象的视图即将加入窗口时调用; viewDidA

Felix_Smile的博客 1330

网工实验笔记:SNMP的配置

简单网络管理协议SNMP(Simple Network Management Protocol)是广泛应用于TCP/IP网络的网络管理标准协议。SNMP提供了一种通过运行网络管理软件的中心计算机(即网络管理工作站)来管理设备的方法。

2301_76170756的博客 2114

iOS 视图的生命周期

1、生命周期中的主要方法 视图就是Controller类,每个视图通常会有一个xib文件,老版本的SDK中是nib文件,是视图的UI布局界面,视图的生命周期一样需要分成几个阶段,每个阶段都会回调相关的方法。 1、viewDidLoad方法 这个方法在我们新建一个试图控制器的时候通常都会自动加入到.m文件中,所有对视图的初始化工作都在这里进行。 2、viewWillAppea

金闪闪的专栏 711

Allegro17.4原理图-PCB双向联动技巧:从网表生成到同步高亮

本文深入解析了Cadence Allegro 17.4中原理图与PCB的深度双向联动技巧。核心在于通过精准的网表生成与管理、实时的跨窗口交互高亮与信号追踪,以及元件与封装的智能匹配更新,构建高效协同设计工作流。掌握这些技巧能显著提升高速、高密度电路设计的效率与准确性,实现从逻辑设计到物理实现的无缝衔接。

weixin_29178069的博客 358

Isaac Lab 强化学习全身控制策略 Sim2Real 宇树人形机器人训练部署 HOVER

《IsaacLab策略训练与部署指南》提供了在仿真和真实机器人上实现HOVER全身控制策略的完整流程。主要内容包括:1) Linux环境下的IsaacLab安装与HOVER资源库配置;2) 使用1024个并行环境训练教师/学生策略的详细步骤;3) 策略测试与评估方法;4) Sim2Sim仿真验证和Sim2Real真实机器人部署方案。本教程特别针对Unitree H1仿人机器人,包含运动数据准备、策略训练、性能评估到硬件部署的全链条实现方案,为机器人控制策略开发提供标准化参考框架。

机器人控制与仿真应用 3070

ios 视图生命周期_iOS视图绘图周期揭秘

ios 视图生命周期Difficulty: Beginner | Easy | Normal | Challenging 难度:初学者| 容易 | 普通| 具有挑战性的 先决条件 (Prerequisites) Some understanding of OO would be beneficial. 对OO有一些了解将是有益的。 iOS应用程序的主运行循环 (Main Run Loop o...

weixin_26638123的博客 489

【教程4>第8章>第10节】OFDM完整通信链路项目的FPGA开发4——插入导频

本文介绍了基于MATLAB和Verilog的导频插入设计与实现方法。首先回顾了MATLAB中导频插入的算法实现,展示了每32个数据插入一个导频的设计。接着详细说明了Verilog硬件实现方案,包括导频序列定义、计数器设计、FIFO模块等关键部分。通过仿真测试验证了设计的正确性,输出了插入导频后的序列、导频序列以及调整时序后的序列。最后提供了相关视频教程资源,帮助读者理解设计过程。该设计实现了数据与导频的精确插入,为OFDM等通信系统开发提供了实用参考。

FPGA/MATLAB学习教程/源码/项目合作开发 395

IOS视图生命周期

视图控制器的生命周期就是一系列的方法,当事件发生时,就会被发送至UIViewController。我们创建的控制器就是UIViewController的子类,它会发送这些消息。 视图控制器的生命周期起始于创建 initWithNibName:这个方法是在controller的类在IB(Interface Builder,界面编辑器)中创建,但是通过Xcode实例化controlle

奔跑的疯子的专栏 544

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

iOS 视图UIViewController的生命周期

1.initWithNibName:bundle: 初始化UIViewController,执行关键数据初始化操作,非StoryBoard创建UIViewController都会调用这个方法。 ** 注意: 不要在这里做View相关操作,View在loadView方法中才初始化。** 2. initWithCoder: 如果使用StoryBoard进行视图管理,程序不会直接初始化一个UIV...

huanglinxiao的博客 1636

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

探索SwiftUI视图生命周期的奥秘:一款直观的iOS和macOS工具

探索SwiftUI视图生命周期的奥秘:一款直观的iOS和macOS工具 在构建优雅且响应式的应用时,深入理解SwiftUI视图的生命周期变得至关重要。今天,我们要向您推荐一个由Ole Begemann匠心打造的开源项目——SwiftUI View Lifecycle。这个项目不仅揭示了不同SwiftUI组件及容器视图如何影响@State对象的生命周期以及事件如onAppear和onDisappea...

gitblog_01141的博客 964

关于iOS 中UIViewController的生命周期以及相关视图(View)的探讨

最近朋友在面试的时候,面试官问到了关于iOS中UIViewController的生命周期以及相关视图(View)的问题,朋友对于自己的观点还是挺有信心的,但是面试官提出了异议,朋友回来便和我们聊起了此事,自己感觉面试官的回答有些问题,特在此发表以下本人对以上问题的理解。1 先看一下有关的方法,相信大家都在熟悉不过//类的初始化方法 + (void)initialize; //对象初始化方法(代码创

LHEnjoy的博客 2016

IOS_UITableViewController 视图控制器的生命周期

// 视图控制器的生命周期 // 1. 初始化方法(init) // 2.如果视图需要显示在屏幕上(View的getter方法被调用) 就会调用loadView方法创建视图,准备显示 // 3 .创建视图之后,调用-viewDidLoad方法创建自定义的子视图 //4. 反复调用视图出现和消失4个方法 // 5. dealloc被销毁,回收内存 #imp

qiyuting_cherish的博客 1820

【iOS】UIViewController的生命周期

之前对于有关于UIViewControlller的理解比较浅显,仅仅只知道他是用来加载视图的,后面在有关天气预报的内容中了解了有关视图控制器生命周期的内容。

qq_73106050的博客 2374

【iOS知识学习】_视图控制对象生命周期-init、viewDidLoad、viewWillAppear、viewDidAppear、viewWillDisappear等的区别及用途

iOS视图控制对象生命周期-init、viewDidLoad、viewWillAppear、viewDidAppear、viewWillDisappear、viewDidDisappear的区别及用途 init-初始化程序 viewDidLoad-加载视图 viewWillAppear-UIViewController对象的视图即将加入窗口时调用; viewDidApper-UIViewC

weasleyqi的专栏 8万+

【iOS】UIViewController生命周期

在iOS开发中,UIViewController是一个很重要的概念。在学习MVC中,我们知道它是view和model的桥梁。UIViewController作为UIKit中最基本的一个类,我们很有必要学习了解一下UIViewController的生命周期。以上就是我学习的UIViewController生命周期小结。

2401_87841908的博客 1263

一文搞懂WMZPageController生命周期:子控制器/子视图管理最佳实践

WMZPageController是一款功能强大的iOS分页控制器,作为UIPageController的理想替代方案,它提供完整的生命周期管理、多种指示器样式和标题样式,支持悬浮效果及iOS 13暗黑模式。本文将详细解析其生命周期机制及子控制器/子视图管理的最佳实践,帮助开发者轻松实现仿优酷、爱奇艺等主流App的分页交互效果。 ## 核心生命周期协议解析 WMZPageController通

gitblog_00268的博客 709

【iOS】关于视图生命周期、NSString变CGPath等问题

这几天遇到的问题集中解决一下。 首先是视图生命周期,这个博客写的很清楚。点击打开链接 如果有个TestViewController,那么 TestVIewController *testVC = [[TestViewController alloc] init]; 只会分配内存并初始化这个视图控制器,并不会去加载它的视图。 系统在需要显示testVC的视图时会自动调用loadView去加

jeremy5的专栏 845

【iOS】ViewController的生命周期

InitloadView()当需要展示view而view为nil时,ViewController会调用loadView方法。viewDidLoad()类成员对象和变量的初始化都在这个方法里,在创建类后无论视图展现还是消失,这个方法只会在布局时调用一次viewWillAppear():视图将要展现的时候调用viewDidAppear():视图已经出现时调用viewWillLayoutSubviews()用于处理视图布局的变化,通常在这里执行与布局相关的操作,在子视图重新布局之前调用。

2301_80095702的博客 1450

swift开发,关于应用、页面、视图的生命周期

本文详细介绍了iOS开发中的生命周期管理,包括应用、页面和视图三个层次。UIKit和SwiftUI的实现方式对比鲜明:UIKit通过AppDelegate和UIViewController的明确方法管理,SwiftUI则采用声明式语法和状态驱动。关键差异在于UIKit需要手动处理视图显示/隐藏和异步任务,而SwiftUI通过.onAppear/.task等修饰符自动管理。最佳实践建议UIKit在viewDidLoad初始化数据,SwiftUI优先使用.onAppear和.task。掌握这些生命周期有助于优化

chenzimin_blog 1002
上一篇: 高效率编辑器 VIM-操作篇,非常适合 VIM 新手
下一篇: 关于git的讨论记录
yangxt
博客等级 码龄20年 172粉丝 78原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值