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属性是空的。

手把手教你用STM32的ADC读取PT100模块,实现高精度温度采集(附完整代码) 本文详细介绍了如何利用STM32的ADC模块读取PT100温度传感器信号,实现高精度温度采集系统。从硬件选型、ADC配置校准到温度计算算法和软件滤波技术,提供完整的实现方案和优化技巧,帮助工程师快速构建稳定可靠的温度监测系统。 阅读详情

相关推荐

运行stable-diffusion出现的问题

解决:即用 https://github.com/CompVis/taming-transformers/blob/master/taming/modules/vqvae/quantize.py 新文件,替换错误提示文件中的全部内容即可。5.新建文件夹 CompVis/stable-diffusion-safety-checker/将下载的四个文件放入 解决!后面还会遇到'openai/clip-vit-large-patch14离线下载的问题,同样步骤解决。解决:下载后离线,步骤如下。

weixin_52121118的博客 2348

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

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

Good_tea_h的博客 1260

第33次CCF-CSP认证考试 第一题 词频统计 满分题解

本人小白一枚,抱着学习的态度想到网上找一些csp的参考答案,但由于实力有限,大佬的代码大都看不太懂,于是萌生了想用一些简单,基础的语句完成csp前两题的想法并公开,以便与像我这样实力不强的同学交流学习,如有更好的建议,还请斧正,感谢!

qq_75242106的博客 1869

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

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

csdn_aiyang的博客 4757

COMSOL后处理与可视化

公众号→【COMSOL仿真交流】←更多精彩内容 后处理是采用COMSOL建模的一个重要环节。通过软件自带的可视化工具,可以快速方便的展现仿真结果。 COMSOL为使用者提供了多种后处理工具,包括表面图、切面图、等值线图、流线图、线图、体图等等。可按功能分为数据集(储存数据的地方)、派生值和表单(对数据进行进一步的操作)、绘图组合绘图类型(显示数据结果的地方)、导出数据与生成报告。   如果想用origin、matlab对模拟数据做进一步的处理,导出excel格式的模拟结果,这可以通过“导出

midiio的博客 4027

Java判断地图坐标(经度,纬度)是否在多边形区域或圆形区域内

​欢迎光临我的博客查看最新文章:在地图上,可以使用经纬度确定一个位置,如上海体育场(121.449391,31.188228),如果知道了2个地点的经纬度,我们就能在地图上找到其位置及2点的距离,百度地图或高德地图提供了相应的服务;如果将多个坐标点连成多边形区域,如何判断某个坐标点是否在多边形区域内,如下工具类。

river106的博客 3942

iOS视图生命周期解析

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

Felix_Smile的博客 1330

更换光猫的原理与方法

当你给装维打电话说你需要更换光猫时,对于装维来说,他并不需要知道怎么更换,他只需要生成一张工单,由后台进行业务操作后,在去用户家把新光猫给装好即可,此时装维到底起到了什么作用呢?我想可能只是运输员吧,把一个设备从一个地方运到另一个地方罢了,此时并不能指望装维做什么,因为本质上来说装维的能力真的很差很差,我是不知道那些装维哪来的勇气做视频,还说自己什么什么能力很强?很强吗?吹牛的技术确实很强。 更换光猫之前,需要先明白为什么要更换光猫,怎么更换光猫,更换后不能用怎么办?怎么才能更换成功,换光猫以后被限速了怎么

qq_34146290的博客 1万+

iOS 视图的生命周期

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

金闪闪的专栏 711

基于CLICKHOUSE的数据仓库分层规范

接入层。

zjyy1987的博客 769

MATLAB - Gazebo 联合仿真 —— 使用 UR10 机械臂检测和采摘水果

本示例演示如何在 Gazebo 物理模拟器中设置 Universal Robotics UR10 机械臂和仿真环境。您需要配置一个机器人从树上摘苹果的仿真环境。本示例演示如何利用这些工具箱,使用 Universal Robotics UR10 机械手模拟机器人检测并从树上摘取苹果。Robotics System Toolbox™ - 在 Simulink® 和 Gazebo 中对机械手进行建模、规划和模拟。Navigation Toolbox™ - 生成三维环境的占用图。

机器人控制与仿真应用 4182

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

FPGA DDR3实战(四):DDR地址映射自动化测试(1)—— 测试程序设计与代码逻辑

本文介绍了一种DDR地址映射自动化测试方案,旨在提高板卡调试效率。方案通过AXI4协议实现主从端通信,构建了包含地址控制器和测试数据生成器的模块化架构。测试程序支持突发传输、状态监控和错误检测,可灵活配置测试参数。采用状态机控制流程,先写入递增数据再读取比对,完成功能验证和性能评估。该方案可系统化验证DDR的正确性、稳定性和可靠性,相比传统手动测试显著提升效率。

FPGA_小田老师的博客 1977

IOS视图生命周期

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

奔跑的疯子的专栏 544

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

iOS 视图UIViewController的生命周期

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

huanglinxiao的博客 1636

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

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

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

gitblog_01141的博客 964

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

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

余额充值