美文网首页iOS菜鸟食谱iOS学习
loadView/viewDidLoad/initWithNib

loadView/viewDidLoad/initWithNib

作者: json_jie | 来源:发表于2015-05-02 22:45 被阅读1362次

    (1)awakeFromNib和initWithCoder:差别
    awakeFromNib 从xib或者storyboard加载完毕就会调用
    initWithCoder: 只要对象是从文件解析来的,就会调用
    同时存在会先调用initWithCoder:

    (2)initWithCoder: & initWithFrame:
    initWithCoder:使用文件加载的对象调用(如从xib或stroyboard中创建)
    initWithFrame:使用代码加载的对象调用(使用纯代码创建)
    注意:所以为了同时兼顾从文件和从代码解析的对象初始化,要同时在initWithCoder: 和 initWithFrame: 中进行初始化

    loadView/viewDidLoad/initWithNibName/awakeFromNib/initWithCoder 调用摘录

    有些需要待验证。。。。。。。。。。。。。。。。。。。。。

    首先,区别程序化初始viewcontroller,半程序化初始和IB初始的区别.

    1. 代码化初始:完全没有Xib之类的东西,通过纯代码实现加载.

    2. 半代码化:设计xib,然后在程序中用代码调用xib来初始化.

    3. 完全IB化:设计xib之类,然后加入到其它xib里.如MainWindow.xib中加入rootviewController,而rootviewcontroller通过xib设计.或者tabbarcontroller中加入多个由xib设计的viewcontroller,这些都是通过IB来初始化的.
      好了,了解了这些,来看看各种方法的使用.

    4. viewDidLoad:这个方法在三种方式下都会调用,而且是加载完view后调用.

    5. loadView:代码初始化程序时设计view用. 半代码化时和完全IB化初始时亦调用,但会重写xib中的view,调用在initwithNibName之后,viewDidLoad之前.

    6. initWithNibName:半代码化初始时使用. 完全IB化初始时不调用,UIViewController代码化初始时会通过init调用,且调用在[super init]中.

    7. awakeFromNib:awakeFromNib这个方法是一个类在IB中被实例化是被调用的.看了帖子发现大家都推荐使用viewDidLoad而不要使用awakeFromNib,应为viewDidLoad会被多次调用,而awakeFromNib只会当从nib文件中unarchive的时候才会被调用一次.实际测试中发现,当一个类的awakeFromNib被调用的时候,那么这个类的viewDidLoad就不会被调用了,这个感觉很奇怪.

    5.initWithCoder是一个类半代码化实例时被调用的.比如,通过IB创建一个controller的nib文件,然后在xocde中通过initWithNibName来实例化这个controller,那么这个controller的initWithCoder会被调用.

    调用顺序: super init->initWithNibName(其实在super init中) ->int after self created->loadView->ViewDidLoad

    相关文章

      网友评论

        本文标题:loadView/viewDidLoad/initWithNib

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