`

UIViewController生命周期-学习笔记[转]

 
阅读更多

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周期

load cycle

  当需要显示或者访问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


分享到:
评论

相关推荐

    Object-C 学习笔记

    2. **ARC(Automatic Reference Counting)**:自iOS 5和Mac OS X Lion引入,ARC自动管理对象的生命周期,减少程序员手动管理内存的工作。 3. **强引用(Strong)、弱引用(Weak)和无主引用(Unowned)**:ARC中...

    swift-ReactNative学习笔记

    6. **App生命周期**: Swift应用有明确的生命周期,包括启动、初始化、激活、后台运行和终止等阶段,理解这些可以帮助优化性能和资源使用。 **React Native知识点** 1. **组件化**: React Native的核心是组件化开发...

    IOS 学习笔记补充1

    3. **App生命周期管理**: 学习笔记可能涵盖了应用的启动过程、内存管理、后台模式以及如何妥善处理应用的生命周期事件。 4. **数据持久化**: iOS中常见的数据存储方式有NSUserDefaults、SQLite数据库、CoreData等,...

    iOS学习笔记,技术道路走到黑.zip

    此外,iOS应用的生命周期管理是每个开发者必须了解的。从应用程序启动到关闭,开发者需要处理各种状态变化,如启动、进入后台、恢复前台、终止等。在这些状态之间转换时,需要正确保存和恢复数据,以确保用户体验的...

    iOS学习笔记

    `UIViewController`提供了添加、删除和管理子视图的能力,以及生命周期管理,如初始化、加载视图和视图的显示与隐藏。在实际编程中,我们经常需要继承自`UIViewController`来创建自定义的视图控制器。 控件的常见...

    iOS 开发流程个人学习笔记

    这份个人学习笔记将深入探讨iOS开发的核心概念、工具、流程以及最佳实践。 首先,我们要了解iOS开发的基础——Swift编程语言。Swift是Apple在2014年推出的一种现代、安全、强大的编程语言,用于构建iOS、iPadOS、...

    Objective-C的入门学习笔记

    - `- (void)viewDidLoad`:例如,这个是 UIViewController 的一个生命周期方法。 6. **内存管理** - **引用计数(Reference Counting)**:Objective-C 旧版使用手动引用计数,`retain` 关键字增加对象的引用计数...

    iOS史上最全的OC笔记

    12. **事件处理**:讲解UIApplication、UIViewController的生命周期,以及UI事件的响应链。 13. **网络编程**:包括URLSession的使用,JSON数据的解析,以及异步请求的处理。 14. **Core Data**:苹果提供的持久化...

    移动开发笔记:记录一下移动开发学习〜

    在iOS开发中,UIKit框架是构建用户界面的核心,学习如何使用UIViewController、UIView、UILabel、UIButton等控件创建交互式界面是基础。 接着转向Android开发,它的主要编程语言是Java,近年来Kotlin也逐渐成为首选...

    ios开发笔记

    - App生命周期:掌握应用启动、暂停、恢复、终止等状态,以及相应的回调函数。 - 视图控制器(UIViewController):理解其作用,如何创建、导航及管理视图。 - 视图(UIView)与层(CALayer):学习视图的布局、...

    IOS视频教程

    在`@implementation`和`@end`之间,你可以看到方法定义,如`- (void)viewDidLoad`、`- (IBAction)buttonTapped:(id)sender`等,这些都是常见的iOS应用生命周期方法或事件处理方法。 在学习这个视频教程的过程中,你...

    CS193P笔

    除此之外,笔记还可能涵盖App生命周期、网络编程(如URLSession)、数据持久化(如Core Data或SQLite)、多线程(GCD)、动画和性能优化等高级主题。对于iOS新手来说,这些内容将帮助他们建立扎实的基础,而对于有...

    ios记事本 iphone

    此外,对于初学者来说,理解iOS的生命周期、事件处理(如触摸事件、按钮点击事件)、以及UI布局(如Auto Layout或Size Classes)也是十分重要的。学习如何通过Interface Builder设计和连接UI元素,以及如何使用Xcode...

    Object-C语言教程0220.zip

    Objective-C引入了自动引用计数(Automatic Reference Counting, ARC),自动管理对象的生命周期。当对象的引用计数为零时,系统会自动释放该对象。 #### 8. 弱引用与强引用 在ARC环境下,`strong`和`weak`关键字...

    IOS面试宝典 最新

    1. UIViewController的生命周期:掌握加载过程、状态保存和恢复、导航控制器的使用等。 2. 自定义UI控件:如何创建自定义视图,以及手势识别和事件传递机制。 3. Auto Layout与Size Classes:布局管理在不同屏幕尺寸...

    IOS应用源码之记事本界面 .rar

    1. iOS应用的基本架构和生命周期。 2. Swift或Objective-C编程基础。 3. UI组件(如UILabel, UITextView, UINavigationBar, UIToolbar)的使用和布局设计。 4. 数据持久化机制,如UserDefaults, SQLite, Core Data。...

    chukwuyenum.dennis-iOS-week-one

    Swift中的变量和常量通过var和let关键字来定义,它们都有明确的生命周期和作用域。 Swift的控制流语句是编程中不可或缺的部分,包括条件语句(if, switch)、循环语句(for-in, while)以及跳转语句(break, ...

Global site tag (gtag.js) - Google Analytics