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应该是一个很好的切入点.当一个看似简单 ...
随机推荐
- apache加载php模块失败
LoadModule php5_module "G:/php54/php5apache2_2.dll" apache2 conf加入这个之后无法加载 解决办法 在这句之前加入PHP ...
- Week14(12月11日):路由
Part I:提问 =========================== 1.Visual Studio 2013自带ASP.NET MVC最高版本为(). A.3 B.4 C.5 D.6 2 ...
- Apache和Nginx下禁止访问特定的目录或文件
大家是否测试Apache做了目录禁止浏览后,目录下面的txt文件还是可以显示里面的内容的.例如:http://www.domain.com/test/此访问会报403错误,但是如果test下有很多tx ...
- 转: seajs手册与文档之--模块定义
模块定义 define id dependencies factory exports require require.async require.resolve require.load requi ...
- 转:JS线程和JS阻塞页面加载的问题
前几日写了一篇文章,介绍了js阻塞页面加载的问题.当时是通过例子来验证的.今天,我介绍一下浏览器内核,从原理上介绍一下js阻塞页面加载的原因. 浏览器的内核是多线程的,它们在内核制控下相互配合以保持同 ...
- Netflix
2009年Netflix举办了一场Netflix大奖赛.他们公开一批匿名数据,允许参赛团队使用以得出更好的算法.他们从获胜的团队中得到了现有算法10.06%的提升.Netflix本想再举行一场Netf ...
- docker 数据盘映射方案
docker run -itd -v /data/:/data1 centos bash // -v 用来指定挂载目录, :前面的/data为本地目录,:后面的/data1 为容器里的目录: dock ...
- BZOJ 1684: [Usaco2005 Oct]Close Encounter
题目 1684: [Usaco2005 Oct]Close Encounter Time Limit: 5 Sec Memory Limit: 64 MB Description Lacking e ...
- Swift入门Hello World! Swift.
苹果公司推出新的开发语言Swift,随着关于趋势,外观和OC什么是不一样的地方. 前提条件:已安装Xcode6-Beta(这个过程是不表) 1.打开Xcode6-Beta,第二选择Create a n ...
- 案例分析:java中substring引发的Full gc
问题定位 由于应用频繁地Full gc,就dump了内存下来用MAT分析,发现有个map占用了98%的内存,于是找到这个map private ConcurrentMap<String, Str ...