zoukankan      html  css  js  c++  java
  • loadView、viewDidLoad、initWithCoder、initWithNibName、awakeFromNib的调用时间及用法

    1> loadView

    无论XIB还是代码创建都会调用loadView方法。self.view为nil时才会被调用。

         手工创建视图时,loadView被调用时self.view还为nil。一般在该方法中手工定制view。
          XIB创建视图时,loadView仍会被系统调用、loadView被调用时XIB定制的视图还没创建完成,若是再覆写该方法的话、会将XIB定制的视图覆盖掉。

    所以,纯手工定制视图时,一般在该方法中写;

    XIB定制视图时、一定不要覆写该方法。

    2>viewDidLoad

    无论XIB还是代码创建都会调用viewDidLoad方法。

         手工创建视图时,viewDidLoad被调用时self.view已经创建完成。可在在该方法中进一步定制视图。
          XIB创建视图时,viewDidLoad仍会被调用,viewDidLoad被调用时self.view已经创建完成。可在在该方法中进一步定制视图。

    所以,无论那种方式定制视图、都可以覆写该方法。

    注:但是在Xcode6.3版本下,个人测试结果为:

    当一个类的awakeFromNib被调用的时候,那么这个类的viewDidLoad就不会被调用了,

    直接从storyboard中加载控制器也不会再调用这个类的viewDidLoad方法

    3>initWithCoder

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

    备注:依个人使用来说,这个方法在解档归档的时候才会有具体明确的作用(欢迎各位同行继续补充)

    写入提取方法   

    <span style="font-family:Lucida Grande, Lucida sans Unicode, Arial, Verdana, sans-serif;">// 1.归档路径    NSString *path = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:@"stu.data"];    //2.归档模型对象    [NSKeyedArchiver archiveRootObject:stu toFile:path];    // 3.从文件中读取Student对象    YHStudent *stu = [NSKeyedUnarchiver unarchiveObjectWithFile:path ];</span>

    cocoa具备一种机制来将对象自身转换为某种格式并保存中磁盘上。

    对象可以将它们的实例变量和其他数据编码为数据块,然后保存到磁盘中。以后将这些数据块都会到内存中,并且还能基于保存的数据创建新对象。这个过程称为编码和解码,或称为序列化和反序列化。

    要编码的对象,必须实现NSCoding协议。

    当对象需要保存自身时-encoderWithCoder:方法被调用

    当对象需要加载自身时-initWithCoder:方法被调用

    initWithCode:和其他init方法一样,中对对象执行操作之前,需要使用超类对它们进行初始化。为此,可以采用两种方式,具体取决于父类,如果父类采用了NSCoding协议,则应该调用[superinitWithCoder:decoder];

    否则,只需要调用[superinit]即可。

    4>initWithNibName

    一般情况下调用 init方法或者调用initWithNibName方法实例化UIViewController, 不管调用哪个方法最终都会调用initWithNibName方法。
     当 控制器被initWithNibName:并加入到导航控制器的栈中时,它不会加载nib文件,直到nib文件被实际显示。因此控制器在nib文件中定 义的内容,例如label,可能还没有实例化。此时label可能只是一个nil指针,需要额外使用代码中实现的属性来存储信息。可以在 viewWillAppear:方法中对niv实例化的对象属性进行设置。 

    注:有两种方法可以加载XIB中的视图,摘录两种的小别如下

    initWithNibName方法:是延迟加载,这个View上的控件是 nil 的,只有到 需要显示时,才会不是 nil 

    loadNibNamed方法:即时加载,用该方法加载的xib对象中的各个元素都已经存在。 

    5>awakeFromNib

    在使用XIB的时候才会涉及到此方法的使用,当.nib文件被加载的时候,会发送一个awakeFromNib的消息到.nib文件中的每个对象,每个对象都可以定义自己的awakeFromNib函数来响应这个消息,执行一些必要的操作。

    参考链接:

    http://blog.csdn.net/lvmaker/article/details/27177113

    http://blog.sina.com.cn/s/blog_5eadd29401011hzj.html

    http://zhidao.baidu.com/link?url=T_EFD7HrZBqB_0JxeohoeXN9VFT4ZMh-0xQSLgAvY-JaowfvDCVwlDe_4Dc-V7m8YQE4GoULlcwddrdsYferj55dZjJL41128hYCqQEIria

  • 相关阅读:
    CodeForces 492C Vanya and Exams (贪心)
    CodeForces 492A Vanya and Cubes
    如何设置 Windows 默认命令行窗口大小和缓冲区大小
    [MySQL] Data too long for column 'title' at row 1
    [转] Hibernate不能自动建表解决办法(hibernate.hbm2ddl.auto) (tables doesn't exist)
    CodeForces 489D Unbearable Controversy of Being (不知咋分类 思维题吧)
    Autofac官方文档翻译--二、解析服务--1解析参数传递
    Autofac官方文档翻译--一、注册组件--4组件扫描
    Autofac官方文档翻译--一、注册组件--3属性和方法注入
    Autofac官方文档翻译--一、注册组件--2传递注册参数
  • 原文地址:https://www.cnblogs.com/fyongbetter/p/5439188.html
Copyright © 2011-2022 走看看