UIViewController生命周期
UIViewControl是IOS程序中的一个重要组成部分,扮演者一个大管家的身份,管理着程序中的众多视图,今天看看了官方文档并做了如下一些简单的记录:
何时加载view,加载的原则是什么,视图何时消失等问题,文档中讲的都很详细。
Controller的view最好在需要显示时再去加载,并且在系统发出内存警告时释放比必要的view及相关的数据对象。
一、UIViewController的初始化
初始化时会根据需要调用init,initWithCoder等相关函数,这个时候我们可以做一下简单的初始化操作,建立ViewController中需要使用的数据模型等,不建议在初始化阶段就直接创建view及其他与显示有关的对象(应该放到loadView的时候去创建,或者采用懒加载的方法创建)。
我们都知道ViewController可以通过代码和xib两种方式创建,这两种方式的初始化流程也不尽相同。
1)使用xib创建的VC
xib其实最终是会把我们的设置保存成一个数据集,当需要初始化构建VC的时候,回去读取记录的数据集,然后帮我们动态的创建VC,因此可以想象它在初始化时会先去找看是否实现initWithCoder方法,如果该类实现了该方法,就直接调用initWithCoder方法创建对象,如果没有实现的话就调用init方法。调用完初始化方法以后紧接着会调用awakeFromNib方法,在这个方法里面我们可以做进一步的初始化操作。
2)使用代码创建VC
使用代码创建时,我们根据需要手动的创建VC中的数据,如果自己定制VC时,还需要在init中调用[super init]。
二、UIViewController中View的load和unload
前面讲了不建议在VC初始化的时候就创建view及其他与显示相关的代码,官方文档建议将View的初始化操作放到loadView的时候再做,当VC接到内存告警时会调用didRecieveMemoryWarning这个时候我们就要做出响应,释放暂时不需要的对象。如果无视这个警告,系统内存不够用时会会继续发送,如果还得不到处理就会强制退出程序。下面看具体的loadView和unloadView时候都会做什么操作。
1)Load周期
当需要显示或者访问view属性时,view没有创建的话,VC就会调用loadView方法,在这个时候会创建一个view并将其赋给VC.view属性。紧接着就会调用VC的viewDidLoad方法,这个时候VC.view保证是有值的,可以做进一步的初始化操作,例如添加一些subview。注意:定制VC时,如果覆盖loadView方法,不需要调用[super loadView]方法。
2)Unload周期
当app收到内存警告的时候,会调用每一个VC的didRecieveMemoryWarning方法,我们需要做出响应,释放程序中暂时不需要的资源。通常都会重写该方法,重写时候需要调用super的该方法。如果检测到当前VC的view可以被安全释放的话,就会调用viewWillUnload方法,这个我们必须要重视,因为当VC的view消失时候它的subviews可能会被一起释放,我们需要根据具体情况做一些记录,以保证下次能够正确创建,同时不出现内存泄漏。调用viewWillUnload以后,会将VC.view属性设置成nil,然后在调用viewDidUnload方法,这个时候我们可以释放那些强引用的对象。
官方文档:The View Controller Life Cycle
分享到:
相关推荐
2. **ARC(Automatic Reference Counting)**:自iOS 5和Mac OS X Lion引入,ARC自动管理对象的生命周期,减少程序员手动管理内存的工作。 3. **强引用(Strong)、弱引用(Weak)和无主引用(Unowned)**:ARC中...
6. **App生命周期**: Swift应用有明确的生命周期,包括启动、初始化、激活、后台运行和终止等阶段,理解这些可以帮助优化性能和资源使用。 **React Native知识点** 1. **组件化**: React Native的核心是组件化开发...
3. **App生命周期管理**: 学习笔记可能涵盖了应用的启动过程、内存管理、后台模式以及如何妥善处理应用的生命周期事件。 4. **数据持久化**: iOS中常见的数据存储方式有NSUserDefaults、SQLite数据库、CoreData等,...
此外,iOS应用的生命周期管理是每个开发者必须了解的。从应用程序启动到关闭,开发者需要处理各种状态变化,如启动、进入后台、恢复前台、终止等。在这些状态之间转换时,需要正确保存和恢复数据,以确保用户体验的...
`UIViewController`提供了添加、删除和管理子视图的能力,以及生命周期管理,如初始化、加载视图和视图的显示与隐藏。在实际编程中,我们经常需要继承自`UIViewController`来创建自定义的视图控制器。 控件的常见...
这份个人学习笔记将深入探讨iOS开发的核心概念、工具、流程以及最佳实践。 首先,我们要了解iOS开发的基础——Swift编程语言。Swift是Apple在2014年推出的一种现代、安全、强大的编程语言,用于构建iOS、iPadOS、...
- `- (void)viewDidLoad`:例如,这个是 UIViewController 的一个生命周期方法。 6. **内存管理** - **引用计数(Reference Counting)**:Objective-C 旧版使用手动引用计数,`retain` 关键字增加对象的引用计数...
12. **事件处理**:讲解UIApplication、UIViewController的生命周期,以及UI事件的响应链。 13. **网络编程**:包括URLSession的使用,JSON数据的解析,以及异步请求的处理。 14. **Core Data**:苹果提供的持久化...
在iOS开发中,UIKit框架是构建用户界面的核心,学习如何使用UIViewController、UIView、UILabel、UIButton等控件创建交互式界面是基础。 接着转向Android开发,它的主要编程语言是Java,近年来Kotlin也逐渐成为首选...
- App生命周期:掌握应用启动、暂停、恢复、终止等状态,以及相应的回调函数。 - 视图控制器(UIViewController):理解其作用,如何创建、导航及管理视图。 - 视图(UIView)与层(CALayer):学习视图的布局、...
在`@implementation`和`@end`之间,你可以看到方法定义,如`- (void)viewDidLoad`、`- (IBAction)buttonTapped:(id)sender`等,这些都是常见的iOS应用生命周期方法或事件处理方法。 在学习这个视频教程的过程中,你...
除此之外,笔记还可能涵盖App生命周期、网络编程(如URLSession)、数据持久化(如Core Data或SQLite)、多线程(GCD)、动画和性能优化等高级主题。对于iOS新手来说,这些内容将帮助他们建立扎实的基础,而对于有...
此外,对于初学者来说,理解iOS的生命周期、事件处理(如触摸事件、按钮点击事件)、以及UI布局(如Auto Layout或Size Classes)也是十分重要的。学习如何通过Interface Builder设计和连接UI元素,以及如何使用Xcode...
Objective-C引入了自动引用计数(Automatic Reference Counting, ARC),自动管理对象的生命周期。当对象的引用计数为零时,系统会自动释放该对象。 #### 8. 弱引用与强引用 在ARC环境下,`strong`和`weak`关键字...
1. UIViewController的生命周期:掌握加载过程、状态保存和恢复、导航控制器的使用等。 2. 自定义UI控件:如何创建自定义视图,以及手势识别和事件传递机制。 3. Auto Layout与Size Classes:布局管理在不同屏幕尺寸...
1. iOS应用的基本架构和生命周期。 2. Swift或Objective-C编程基础。 3. UI组件(如UILabel, UITextView, UINavigationBar, UIToolbar)的使用和布局设计。 4. 数据持久化机制,如UserDefaults, SQLite, Core Data。...
Swift中的变量和常量通过var和let关键字来定义,它们都有明确的生命周期和作用域。 Swift的控制流语句是编程中不可或缺的部分,包括条件语句(if, switch)、循环语句(for-in, while)以及跳转语句(break, ...