awakefromnib什么时候调用

awakefromnib什么时候调用

第一、initWithNibName这个方法是在controller的类在IB中创建,但是通过Xcode实例化controller的时候用的.

第二、initWithCoder 是一个类在IB中创建但在xocde中被实例化时被调用的.比如,通过IB创建一个controller的nib文件,然后在xcode中通过 initWithNibName来实例化这个controller,那么这个controller的initWithCoder会被调用.或者是一个view的nib文件,类似方法创建时调用initWithCoder

第三、awakeFromNib 

当.nib文件被加载的时候,会发送一个awakeFromNib的消息到.nib文件中的每个对象,每个对象都可以定义自己的awakeFromNib函数来响应这个消息,执行一些必要的操作。也就是说通过nib文件创建view对象时执行awakeFromNib
第四、关于 initWithNibName 和 loadNibNamed 的区别和联系 :

关于 initWithNibName 和 loadNibNamed 的区别和联系。之所以要把这两者来一起讲,我觉的我也有点困惑,到底用那种?其实真正搞清楚了他们之间的差别,就不会这么迷惘了。因为这两个方法,根本就不是一路货色。 
既然,是要说明这2个方法,那就着重将区别吧。 
但是第一步,还是要罗嗦一下,他们的联系:可以使用此方法加载用户界面(xib文件)到我们的代码中,这样,可以通过操作这个加载进来的(xib)对象,来操作xib文件内容。 
下面进入主题,谈区别: 
1. ShowViewController的initWithNibName方法 
ShowViewController * showMessage = [[ShowViewController alloc] 
initWithNibName:@"ShowViewController" bundle:nil]; 
self.showViewController = showMessage; 
[showMessage release]; 
2.VideoCellController的loadNibNamed方法 
NSArray * nib = [[NSBundle mainBundle] loadNibNamed:@"Save3ViewController" 
owner:self options:nil] ;

总结: 
只看他们初始化,那可能感觉是一样的。但是如果,打开分别看xib的关系的时候,才恍然大悟,原来他们的集成类都不一样。 
1. initWithNibName要加载的xib的类为我们定义的视图控制器类 
2.加载方式不同 
initWithNibName方法:是延迟加载,这个View上的控件是 nil 的,只有到 需要显示时,才会不是 nil
loadNibNamed方法:即时加载,用该方法加载的xib对象中的各个元素都已经存在。 
(认真理解这句帮规:when using loadNibNamed:owner:options:, the File‘s Owner should be NSObject, the main view should be your class type, and all outlets should be hooked up to the view, not the File‘s Owner.)

第五、initWithCoder和initWithFrame的区别 
nitWithoder 是当从nib文件中加载对象的时候会调用,比如你的view来自nib那么就会调用这个view的这个函数。(由框架调用) 
initWithFrame (是由用户调用,来初始化对象的)

The init method that gets used depends on how the view is created. It can be explicitly created using initWithFrame or it can be created by loading a nib. In that case, the initWithCoder method gets called when the view is loaded from the nib. There are other init methods for subclasses (like UITableViewController has initWithStyle), so you have to be sure which one is being called.

self.showViewController = [nib lastObject]; 
[nib objectAtIndex:0];

时间: 2024-10-09 21:07:59

awakefromnib什么时候调用的相关文章

initWithCoder、awakeFromNib、initWithFrame

首先,创建一个UIView对象有两种方法:IB方式和编码方式. 1.IB(Interface Builder)方式:即从nib文件中加载视图,此时会调用该view对象的initWithCoder方法,接着调用awakeFromNib方法 CMButton *button = [[[NSBundle mainBundle] loadNibNamed:@"CMViewController" owner:self options:nil] lastObject]; //此句会调用button

CS193p Lecture 7

Animation, Auto layout Views 如何绘制自定义图像 Gestures 如何处理用户手势操作 Views 1.它是基本的构造块,代表屏幕上一块矩形区域,定义了一个坐标空间,在此空间中可以绘制,可以添加触控事件: 2.它是分层级的,可以在视图中嵌套视图: 3.一个视图只有一个父视图,但可以有多个子视图,视图就是一个个的矩形,可以重叠: 4.UIWindow,所有视图都展示在其中 self.view.window 5.常用的初始化模版 - (void)setup{...} -

[Stanford 2011] UIView、协议、手势识别

1.Autorotation 自动旋转时controller发生了什么?一是controller的view在controller允许的时候调整frame,方法shouldAutorotateToInterfaceOrientation返回controller是否允许view自动根据设备旋转而旋转.自动旋转接口包括竖直.上下颠倒.左横向和右横向这4种情况.只要在controller里实现这个方法就ok.   不管支持的是哪个方向,旋转的时候view的bound会改变,子view的frame会变,子

面向对象程序设计简介(2/2)

在 本教程的第一部分中,你学会了面向对象设计的基本概念:对象,继承以及模型-视图-控制器(MVC)模式.你初步完成了一个叫做 Vehicles 的程序,它帮助你更好的理解所学的这些概念.在这第二部分中,你将学习多态性以及其它一些面向对象编程的关键概念:类工厂方法和单例.如果你已经完成了本教程的前半部分,那就太好了!你可以在本教程中继续使用之前您所使用的工程.然而,如果你刚刚开始阅读本篇教程,你也可以从这里下载我们为你准备的第一部分完整工程. 多态性(Polymorphism) 关于多态的普通定义

iOS7/Object-C ViewController的生命周期

1.初始化,ViewController会从storyboard初始化,但是init方法不会被调用(初始化方法类似风干->加水),初始化时awakeFromNib会被调用 2.设置好输出口(outlet)后,viewDidLoad会被调用 3.几何位置被决定后,viewWillLayoutSubviews/viewDidLayoutSubviews会被调用,因此这之前不要初始化几何位置相关的内容 4.然后,MVC每次出现在屏幕上时,viewWillAppear/viewDidAppear会被调用

ios20--xib2

故事板控制器: // // ViewController.m // 03-通过xib自定义商品的View #import "ViewController.h" #import "XMGShopView.h" @interface ViewController () @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; // 加载xib // XMGShopView

Swift之xib模块化设计

一.解决问题 Xib/Storybarod可以方便.可视化的设置约束,在开发中也越来越重要.由于Xib不能组件化,使得封装.重用都变得不可行.本文将介绍一种解决方案,来实现Xib组件化. 二.模型块原理 在介绍原理之前,我们先弄清楚两个概念: 从上图可以看出,分别选中File's Owner及根视图View,都有Custom Class属性面板.其中Class属性,有什么作用,区别又是什么呢? 2.1 View的Class属性 View的Class属性用于指定选中的视图的实例化类.Xib实际上是

initWithFrame、initWithCoder、awakeFromNib的区别和调用次序 & UIViewController生命周期 查缺补漏

当我们创建或者自定义一个UI控件时,就很可能会调用awakeFromNib.initWithCoder .initWithFrame这些方法.三者的具体区别如下: initWithFrame: 通过代码创建UI控件的时候就会调用: initWithCoder:从文件中解析一个对象的时候就会调用这个方法,也就是说无论是通过代码还是xib,程序运行的时候都会调用这个方法: awakeFromNib:当一个对象从xib或者storyboard中加载完毕后,就会调用一次. 比如:当苹果官方提供的按钮不能

initWithNibName、initWithCoder、awakeFromNib和 loadNibNamed详解

第一.initWithNibName这个方法是在controller的类在IB中创建,但是通过Xcode实例化controller的时候用的. 第二.initWithCoder 是一个类在IB中创建但在xocde中被实例化时被调用的.比如,通过IB创建一个controller的nib文件,然后在xcode中通过 initWithNibName来实例化这个controller,那么这个controller的initWithCoder会被调用.或者是一个view的nib文件,类似方法创建时调用ini