美文网首页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