视图控制器被创建,并在屏幕上显示的时候。 代码的执行顺序

当一个视图控制器被创建,并在屏幕上显示的时候。 代码的执行顺序
1、 alloc                                   创建对象,分配空间
2、init (initWithNibName) 初始化对象,初始化数据
3、loadView                          从nib载入视图 ,通常这一步不需要去干涉。除非你没有使用xib文件创建视图
4、viewDidLoad                   载入完成,可以进行自定义数据以及动态创建其他控件
5、viewWillAppear              视图将出现在屏幕之前,马上这个视图就会被展现在屏幕上了
6、viewDidAppear               视图已在屏幕上渲染完成

当一个视图被移除屏幕并且销毁的时候的执行顺序,这个顺序差不多和上面的相反
1、viewWillDisappear            视图将被从屏幕上移除之前执行
2、viewDidDisappear             视图已经被从屏幕上移除,用户看不到这个视图了
3、dealloc                                 视图被销毁,此处需要对你在init和viewDidLoad中创建的对象进行释放

关于viewDidUnload :在发生内存警告的时候如果本视图不是当前屏幕上正在显示的视图的话, viewDidUnload将会被执行,本视图的所有子视图将被销毁,以释放内存,此时开发者需要手动对viewLoad、viewDidLoad中创建的对象释放内存。 因为当这个视图再次显示在屏幕上的时候,viewLoad、viewDidLoad 再次被调用,以便再次构造视图。

当我们创建一个UIViewController类的对象时,通常系统会生成几个默认的方法,这些方法大多与视图的调用有关,但是在视图调用时,这些方法的调用顺序如何,需要整理下。

通常上述方法包括如下几种,这些方法都是UIViewController类的方法: 

- (void)viewDidLoad; 

- (void)viewDidUnload; 

- (void)viewWillAppear:(BOOL)animated; 

- (void)viewDidAppear:(BOOL)animated; 

- (void)viewWillDisappear:(BOOL)animated; 

- (void)viewDidDisappear:(BOOL)animated; 

 

下面介绍下APP在运行时的调用顺序。

1)- (void)viewDidLoad;

      一个APP在载入时会先通过调用loadView方法或者载入IB中创建的初始界面的方法,将视图载入到内存中。然后会调用viewDidLoad方法来进行进一步的设置。通常,我们对于各种初始数据的载入,初始设定等很多内容,都会在这个方法中实现,所以这个方法是一个很常用,很重要的方法。

      但是要注意,这个方法只会在APP刚开始加载的时候调用一次,以后都不会再调用它了,所以只能用来做初始设置。

2) - (void)viewDidUnload;

      在内存足够的情况下,软件的视图通常会一直保存在内存中,但是如果内存不够,一些没有正在显示的viewcontroller就会收到内存不够的警告,然后就会释放自己拥有的视图,以达到释放内存的目的。但是系统只会释放内存,并不会释放对象的所有权,所以通常我们需要在这里将不需要在内存中保留的对象释放所有权,也就是将其指针置为nil。

      这个方法通常并不会在视图变换的时候被调用,而只会在系统退出或者收到内存警告的时候才会被调用。但是由于我们需要保证在收到内存警告的时候能够对其作出反应,所以这个方法通常我们都需要去实现。

      另外,即使在设备上按了Home键之后,系统也不一定会调用这个方法,因为IOS4之后,系统允许将APP在后台挂起,并将其继续滞留在内存中,因此,viewcontroller并不会调用这个方法来清除内存。

3)- (void)viewWillAppear:(BOOL)animated;

      系统在载入所有数据后,将会在屏幕上显示视图,这时会先调用这个方法。通常我们会利用这个方法,对即将显示的视图做进一步的设置。例如,我们可以利用这个方法来设置设备不同方向时该如何显示。

      另外一方面,当APP有多个视图时,在视图间切换时,并不会再次载入viewDidLoad方法,所以如果在调入视图时,需要对数据做更新,就只能在这个方法内实现了。所以这个方法也非常常用。

4) - (void)viewDidAppear:(BOOL)animated;

      有时候,由于一些特殊的原因,我们不能在viewWillApper方法里,对视图进行更新。那么可以重写这个方法,在这里对正在显示的视图进行进一步的设置。

5) - (void)viewWillDisappear:(BOOL)animated; 

      在视图变换时,当前视图在即将被移除、或者被覆盖时,会调用这个方法进行一些善后的处理和设置。

      由于在IOS4之后,系统允许将APP在后台挂起,所以在按了Home键之后,系统并不会调用这个方法,因为就这个APP本身而言,APP显示的view,仍是挂起时候的view,所以并不会调用这个方法。

6) - (void)viewDidDisappear:(BOOL)animated;

      我们可以重写这个方法,对已经消失,或者被覆盖,或者已经隐藏了的视图做一些其他操作。

 

 

上述方法的流程图可以简单用如下表示:

 

             运行APP —> 载入视图 —> 调用viewDidLoad方法 —> 调用viewWillAppear方法 —> 调用viewDidAppear方法 —>   正常运行 

aaaaaaaa                                                                                          A                                                                            | 

aaaaaaaa                                                                                          |                                                                             | 

aaaaaaaa                                                                                          | 载入新的View                                                          | 

aaaaaaaa                                                                                          |                                                                             | 

aaaaaaaa                                                                                          |                                                                             V

释放对象所有权 <— 调用viewDidUnload <— 收到内存警告 <— 调用viewDidDisappear <— 调用viewWillDisappear <—  APP需要调用另一个view

IOS程序启动执行顺序

http://www.yifeiyang.net/iphone-developer-advanced-3-iphone-application-startup-process/

 

 

IOS 开发 loadView 和 viewDidLoad 的区别

iPhone开发必不可少的要用到这两个方法。 他们都可以用来在视图载入的时候,初始化一些内容。 但是他们有什么区别呢?

viewDidLoad 此方法只有当view从nib文件初始化的时候才被调用。

loadView 此方法在控制器的view为nil的时候被调用。 此方法用于以编程的方式创建view的时候用到。 如:

  1.  

  2. - ( void ) loadView {

  3.     UIView *view = [ [ UIView alloc] initWithFrame:[ UIScreen

  4. mainScreen] .applicationFrame] ;

  5.    [ view setBackgroundColor:_color] ;

  6.     self.view = view;

  7.    [ view release] ;

  8. }

  9.  

你在控制器中实现了loadView方法,那么你可能会在应用运行的某个时候被内存管理控制调用。 如果设备内存不足的时候, view 控制器会收到didReceiveMemoryWarning的消息。 默认的实现是检查当前控制器的view是否在使用。如果它的view不在当前正在使用的view hierarchy里面,且你的控制器实现了loadView方法,那么这个view将被release, loadView方法将被再次调用来创建一个新的view。

转载于:https://my.oschina.net/u/3756749/blog/1791340

「OC」ViewController的生命周期 之前学习了MVC的简单入门,我们知道了C指的就是ViewController,那我们就借此机会探究一下ViewController的生命周期相关内容。在iOS开发中,ViewController的生命周期函数扮演着至关重要的角色,控制着视图控制器的加载、显示和消失过程。通过深入理解这些生命周期函数,我们可以更好地管理和控制视图控制器的行为,在需要的地方添加相关逻辑进行操作。 阅读详情

相关推荐

30天学会OC-15:视图控制器

本文介绍了iOS开发中的核心概念:MVC设计模式、UIView和UIViewController的使用。MVC将应用分为模型、视图控制器,实现职责分离。UIView负责显示内容,通过frame、bounds等属性控制布局。UIViewController管理视图生命周期,包括viewDidLoad、viewWillAppear等方法。文章还讲解了通过代码或Interface Builder创建UI的方法,以及视图控制器间的跳转方式。这些基础知识是构建iOS应用的重要组件。

smileKH的博客 776

UIViewController的生命周期及iOS程序执行顺序

当一个视图控制器创建屏幕显示的时候。 代码执行顺序 1、 alloc                                   创建对象,分配空间 2、init (initWithNibName) 初始化对象,初始化数据 3、loadView                          从nib载入视图 ,通常这一步不需要去干涉。除非你没有使用xib文件创建视图

huifeidexin_1的专栏 12万+

GPS卫星轨道的理论和计算笔记分享

广义相对论预测,对比在时空弯曲度较大的地面上的原子钟,运行于时空弯曲度较小的卫星原子钟在地面上看起来更快,每天快约45us;反过来,当电压施加在晶体上时,晶体形状会扭曲(比如说伸长),而当晶体被施加上反向电压后,它将做相反的变形运动(比如缩短)。X轴:指向参考子午面与地球赤道的一个交点;从北黄极上方观察,地球北极在空间的运动轨迹是一个近似于以北黄极为中心的顺时针方向旋转的圆周,圆周半径等于。从上万年周期看,地球北极绕北黄极做大圆周运动,而从几年的短期来看,北极又在某一点处做局部的小幅椭圆运动。

m0_57139844的博客 1987

OC 视图的生命周期

OC  视图的生命周期 -(void)init  //创建 -(void)loadView//构建视图层级结构 -(void)viewDidLoad //视图加载完成 -(void)viewWillAppear//视图将要出现 -(void)viewWillLayoutSubViews// 视图将要布局 -(void)viewDidLoayouSubViews //视图布局完成

FFBeyond的博客 923

ios_oc 应用程序的生命周期

iOS的应用程序的生命周期,还有程序是运行在前台还是后台,应用程序各个状态的变换,这些对于开发者来说都是很重要的。iOS系统的资源是有限的,这样可以提高电池的使用和用户体验。 开发app,我们要遵循apple公司的一些指导原则,原则如下: 1、应用程序状态 状态如下: Not running 未运行 程序没启动 Inactive 未激活 ...

289

OC内存管理 生命周期

解决方法: 1 有创建,就要有销毁. 所谓 内存管理: 针对创建和销毁过程进行管理 2 垃圾回收(JAVA,C#); 3人工管理(OC,C,C++) 4自动管理内存(ARC,IOS5新特性),非垃圾回收. 5引用计数 (retainCount)  6出生于alloc (分配内存)死于 dealloc(销毁内存) 7alloc 赋值为1 当实例对象的引用计数为0时,自动对该实例对象发

248

<IOS>视图控制器执行顺序详解

视图控制器执行方法及顺序    每个程序在执行的时候, 都会经由视图显示出来, 每个界面都是一个个视图的呈现, 那么问题来了, 要把视图显示到窗口, 总共分几步, 以下是我对视图控制器执行顺序的理解.  当一个视图控制器创建屏幕显示的时候。 代码执行顺序 1、 alloc                                   创建对象,分配空间 2、in

tl212400的专栏 1013

视图控制器的作用

视图控制器概述UIViewController:视图控制器。 控制视图显⽰示,响应事件。 分担AppDelegate的⼯工作。 实现模块独⽴立,提⾼高复⽤用性。视图控制器功能控制视图⼤大⼩小变换、布局视图、响应事件。 检测以及处理内存警告。 检测以及处理屏幕旋转。 检测视图的切换自定义视图类UIViewController⾃自带⼀一个空的view,与需求不符合。 视图控制器

u013430241的博客 693

iOS 视图控制器的方法执行顺序

1 alloc  视图开始创建时, 需要开辟一个新的内存空间, 这时就需要alloc申请一块新的内存空间. 2 init  初始化视图. 3 ViewLoad, ViewDidLoad    通过英文就能明确到,  这两个方法的字面意思是, 正在加载视图,视图已经加载. 这两个方法一般是成对出现的. 视图的基本布局和属性基本都在ViewDidLoad中进行输入, 视图中的控件方法,如ta

XiaoMuJingfeng的博客 1444

new 和 alloc init 的区别 和视图控制器创建显示屏幕上的代码执行顺序

object c中new和alloc init的区别new是较为老式的写法,后来发现只有一个new不好使,才引入了alloc和init这种写法, 保留new一是向后兼容 二是很多时候是一种更简单的写法,alloc分配内存的时候使用了zone zone是给对象分配内存的时候 把关联的对象分配到一个相邻的内存区域内 以便于调用时消耗了很少的代价 提升了程序的处理速度 当一个视...

weixin_30670925的博客 82

模型-视图-控制器(MVC)设计模式

模型-视图-控制器(MVC)模式将对象分为三种不同的类型。是的,你猜对了:这三种类型是:模型、视图控制器! 用下图来解释这些类型之间的关系相当简单。 (Models)模型保存应用数据。它们通常是结构或简单的类。 (View)视图屏幕显示视觉元素和控件。它们通常是UIView的子类。 (Controllers)控制器在模型和视图之间进行协调。它们通常是UIViewController的子类。 MVC在iOS编程中非常常见,因为这是苹果在UIKit中选择采用的设计模式。 允许控制器为他们的模型和视图

三线程序员的博客 2454

视图控制器总结

视图控制器的基本概念 //真正开发中不会将所有控件写在窗口视图上 //而是写在视图控制器自带的视图上 //这样的代码便于维护和修改 //层次结构:屏幕-->窗口-->视图控制器(自带的UIView视图)-->任意类型的控件都可以添加到这个自带的视图上 //视图控制器UIViewController 相当于一个容器 看...

155

IOS开发视图视图控制器

视图(View), 视图控制器(ViewController)是IOS开发UI部分比较重要的东西。在学习视图这一块的东西的时候,感觉和Java Swing中的Panel差不多。在UIKit框架中都有一个UIWindow来容纳我们的View。应用程序中几乎全部的可视控件都是UIView以及UIView的子类的实例,且UIWindow也是UIView的子类。UIWindow可以不借助于父类视图显示

sulan2131的博客 342

UIViewController的iOS程序执行顺序

当一个视图控制器创建屏幕显示的时候。 代码执行顺序 1、 alloc                                   创建对象,分配空间 2、init (initWithNibName) 初始化对象,初始化数据 3、loadView                          从nib载入视图 ,通常这一步不需要去干涉。除非你没有使用xib文件创建视图

梦醒梦飞翔的专栏 506

UIViewController 视图控制器

作用概述: •创建和管理视图。 •管理视图显示的数据。 •设备方向变化,调整视图大小以适应屏幕。 •负责视图和模型之间的数据及请示的传递。

rare_ice的博客 471

视图的运行顺序及生命周期

视图的生命周期即运行顺序 当一个视图控制器创建屏幕显示的时候。 代码执行顺序      1、 alloc                                   创建对象,分配空间      2、init (initWithNibName) 初始化对象,初始化数据      3、loadView                          从n

zhaojinqiang12的博客 1556

L002-视图视图控制器

MVC设计模式 MVC设计模式是一种面向对象思想的设计模式 M(Model):模型,用于提供和存储程序执行过程中所需要的数据。 V(View):视图,用户可见或可交互的界面元素。 C(Controller):控制器,作为Model和View之间交互的媒介,实现大量的鞋无逻辑。 MVC设计模式结构: View与Model不直接进行交互。 通过Controller间接实现View与Model的交互。 C

LiHy_的专栏 547

视图控制器的生命周期方法

1、application:didFinishLaunchingWithOptions:在该方法中设置和初始化应用窗口的根视图控制器。该方法只会在应用启动完毕后调用一次,之后如果从其他应用切换回本应用,则该方法不会再次被调用。如果关闭应用后台进程,重新启用该应用,该方法才会重新被调用。2、initWithNibName:bundle:该方法是UIViewController的指定初始化方法,创建

Madkara的博客 692
上一篇: UITextField常用属性
下一篇: 关于property的各个修饰符
cigoulu3256
博客等级 码龄10年 0粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值