UIViewController加载过程
UIViewController是视图和数据的桥梁,UIViewController是所有controller的基类,ios内置了很多试图控制器,如导航控制器,tableViewController等。
视图控制本身包含一个视图,是view。UIScreen是连接物理屏幕的标示,UIWindow是为UIScreen提供了一个画布。
加载过程分为以下几步:
第一、从xib文件中创建:- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
sample:
self.viewController = [[[AndyViewControlleralloc]initWithNibName:@"AndyViewController"bundle:nil]autorelease];
说明:
如果对象是UIViewController的子类,那么必定会调用该函数,init函数在初始化过程中也会调用此函数,如果文件中没有xib,那么初始化调用完此函数后,view仍然回空,这个时候调用view的set方法发现,view为空,就会自动调用loadView方法初始化一个emptyView,如果子类重写了该方法,那么就会调用子类的该方法,但是子类重写时必须self.view 复制,否则view将为空,接下来调用viewDidLoad方法。
第二、loadView方法
当view需要被展示而它却是nil时,viewController会调用该方法。不要直接调用该方法。
如果手工维护views,必须重载重写该方法
如果使用IB维护views,必须不能重载重写该方法
loadView和IB构建view
作用:在需要用程序自定义view时重新,其他情况可以不用考虑
第三、(void)viewDidLoad
在调用完loadView方法后,调用此方法,重写该方法可以进一步定制view,
一般情况下,数据对象是通过配置view controller的属性来提供的,view controller需要的一些额外的数据应该通过重写viewDidLoad函数来提供。
但是如果此时view没有创建好,使用self.view时会重新调用loadView方法,这样导致死循环。
实例代码如下:
-(void)loadView
{
NSLog(@"loadView");
// UIView *view=[[UIView alloc] initWithFrame:[UIScreen mainScreen].applicationFrame];
// view.backgroundColor=[UIColor greenColor];
// self.view=view;
// [view release]; //添加子视图
}
- (void)viewDidLoad
{
[super viewDidLoad];
UIView *view=[[UIView alloc] initWithFrame:[UIScreen mainScreen].applicationFrame];
view.backgroundColor=[UIColor greenColor];
[self.view addSubview:view];
[view release]; NSLog(@"view Did Load");
//注意上面的操作会判断view是否为空,如果view为空,就会调用loadview方法
// Do any additional setup after loading the view.
}
第四、- (void)viewWillAppear:(BOOL)animated; // Called when the view is about to made visible. Default does nothing
第五、- (void)viewDidAppear:(BOOL)animated; // Called when the view has been fully transitioned onto the screen. Default does nothing
UIViewController加载过程的更多相关文章
- iOS之nib、xib及storyboard的区别及storyboard的加载过程
先讲述下nib, nib是3.0版本以前的产物,在终端下我们可以看到,NIB其实是一个文件夹,里面有可执行的二进制文件: 区分xib和storyboard的区别? 不同点: 1> 无论nib也好 ...
- 工厂模式模拟Spring的bean加载过程
一.前言 在日常的开发过程,经常使用或碰到的设计模式有代理.工厂.单例.反射模式等等.下面就对工厂模式模拟spring的bean加载过程进行解析,如果对工厂模式不熟悉的,具体可以先去学习一下工厂 ...
- linux内核启动以及文件系统的加载过程
Linux 内核启动及文件系统加载过程 当u-boot 开始执行 bootcmd 命令,就进入 Linux 内核启动阶段.普通 Linux 内核的启动过程也可以分为两个阶段.本文以项目中使用的 lin ...
- Inside Flask - flask 扩展加载过程
Inside Flask - flask 扩展加载过程 flask 扩展(插件)通常是以 flask_<扩展名字> 为扩展的 python 包名,而使用时,可用 import flask. ...
- web.xml 的加载过程
初始化过程: 在启动Web项目时,容器(比如Tomcat)会读web.xml配置文件中的两个节点<listener>和<contex-param>. 接着容器会创建一个Serv ...
- Browser默认书签加载过程
Browser配置默认书签——string.xml中<string-array name="bookmarks" translatable="false" ...
- Android View的加载过程
大家都知道Android中加载view是从Activity的onCreate方法调用setContentView开始的,那么View的具体加载过程又是怎么的呢?这一节我们做一下分析. 首先追踪一下代码 ...
- 你所不知道的SQL Server数据库启动过程(用户数据库加载过程的疑难杂症)
前言 本篇主要是上一篇文章的补充篇,上一篇我们介绍了SQL Server服务启动过程所遇到的一些问题和解决方法,可点击查看,我们此篇主要介绍的是SQL Server启动过程中关于用户数据库加载的流程, ...
- Ogre中Mesh的加载过程详述
转自:http://blog.csdn.net/yanonsoftware/article/details/1031891 如果新开始写一个3D渲染引擎,Mesh应该是一个很好的切入点.当一个看似简单 ...
随机推荐
- c语言单链表,冒泡排序
node *sort(node *head){ node *p,*p2,*p3; int n; int temp; n=length(head); if(head==NULL||head->ne ...
- MFC基础,MFC自绘控件学习总结.---转
前言:从这学期开始就一直在学习自绘控件(mfc),目标是做出一款播放器界面,主要是为了打好基础,因为我基础实在是很烂....说说我自己心得体会以及自绘控件的方法吧,算是吐槽吧,说的不对和不全的地方,或 ...
- Physiological Processes of Speech Production--Reading Notes (8)
Upper Jaw The upper jaw, or the maxilla with the upper teeth, is the structure fixed to the skull, f ...
- 如何使用notepad++搭配MinGW配置编译C/C++
最经开始学C++了,平时学习不喜欢用IDE,一直以来都喜欢使用sublimetext写代码.所以在网上找了一下如何配置sublimetext编译C/C++.不过简单配置之后,只有输出,要想进行输出操作 ...
- [Swust OJ 842]--实验室和食堂(最短路,Dijkstra算法)
题目链接:http://acm.swust.edu.cn/problem/842/ Time limit(ms): 1000 Memory limit(kb): 10000 Description ...
- 什么时候需要交换Top Level ?
什么时候需要交换Top Level ? 上一篇中提到,如果采用仿真的时候,运用门级仿真就需要进行顶层交换,RTL仿真不需要,那么什么时候需要呢? QuartusII 向下包含,在Project Nav ...
- Python 2.7 学习笔记 模块和包
我们来考虑下如下几种场景: 1.编写一个python程序,如果程序比较简单,则可以把代码放到一个python文件中.但如果程序功能比较多,可能需要多个python文件来组织源代码.而这些文件之间的代码 ...
- YARN & HDFS2 安装和配置Kerberos
今天尝试在Hadoop 2.x开发集群上配置Kerberos,遇到一些问题,记录一下 设置hadoop security core-site.xml <property> <name ...
- CCIE路由实验(3) -- BGP高级部分
当一个AS包含多个IBGP对等体时,路由反射器非常有用.因为IBGP客户只需要和路由反射器建立邻居关系,从而降低了IBGP的连接数量.路由反射器和它的客户合称为一个簇.路由反射是克服IBGP水平分割的 ...
- 基于visual Studio2013解决C语言竞赛题之0510求最大和
题目