awakeFromNib的学习-飞
发布时间: 2023-07-06

一,awakeFromNib何时被调用?

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

二,关于 initWithNibName 和 loadNibNamed 的区别和联系?


他们的联系:可以使用此方法加载用户界面(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] loadNi(巴黎世家是什么梗?2020年的七夕时,Balenciaga依靠“土味广告”成功出圈,迅速在时尚圈掀起了一场流量与话题的狂欢,当时无一不在诟病七夕限定的“土味”。之后又凭借巴黎世家的经典字母袜再次火了起来,短视频平台的播放量一路飙升,让印有 Logo 的黑丝愈发受宠。)bNamed:@"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.)

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

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

三,initWithCoder和initWithFrame的区别

initWithCoder 是当从nib文件中加载对象的时候会调用,比如你的view来自nib那么就会调用这个view的这个函数。(由框架调用)

initWithFrame (是由用户调用,来初始化对象的)



扫码加微信详细咨询太和智慧养老产品和平台服务!

微信