美文网首页iOS 进阶selector
awakeFromNib和layoutSubView

awakeFromNib和layoutSubView

作者: 半杯故事 | 来源:发表于2017-11-07 10:24 被阅读286次

awakeFromNib

  • awakeFromNib 从xib或者storyboard加载完毕就会调用
  • initWithCoder: 只要对象是从文件解析来的,就会调用
  • awakeFromNib和initWithCoder同时存在会先调用initWithCoder:
  • initWithFrame:使用代码加载的对象调用(使用纯代码创建)

nib 加载结构时 发送一个awakeFromNib消息告诉每个对象重建一个nib 归档,但只有在所有的档案中的对象已加载和初始化。当一个对象接收awakefromnibmessage,这是保证其所有出口和行动连接已经建立。

-(void)awakeFromNib;从字面上理解,就是从nib文件中唤醒对象,完成对每一个对象的实例化或与nib文件的关联。

需要注意的问题:
当使用一个controller控制多个nib文件时,awakeFromNib方法会被多次调用。因此,当不使用awakeFromNib方法来完成nib对象的初始化时,需要注意此方法的多次调用对其他nib文件造成的影响

layoutSubview

layoutSubview :为该View添加子控件,设置frame值
layoutSubview的调用场景:

使用addSubview添加时会调用layoutSubView
设置视图的父视图的Size时会调用
改变视图的frame的时候会被调用
滚动scrollview的时候会被调用
设备的orientation(方向)改变时,涉及改变的UIViewControl 的root view
(此时所有的控件被重新布局,相当于A的frame被改变 那么会调用layoutSubview 而且如果控件有B的话会再调用一次layoutSubview)
调用setNeedsLayout时会被调用

layoutSubview不是在调用完比如addSubview等方法之后就马上调用,而是会在调用addSubview方法所在的作用域结束之后之后才调用,因此即使你在同一个方法中既使用了addSubViews又更改了frame,也是只会调用一次layoutSubview而已

相关文章

网友评论

    本文标题:awakeFromNib和layoutSubView

    本文链接:https://www.haomeiwen.com/subject/pgpdmxtx.html