博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS UIViewController 应用要点
阅读量:7092 次
发布时间:2019-06-28

本文共 2230 字,大约阅读时间需要 7 分钟。

hot3.png

 

iOS UIViewController 应用要点

iOS UIViewController 使用要点

        1. 视图控制对象有一个类型为UIView的属性view。这个视图通常会有子视图,例如按钮和标签。视图控制对象通常是UIViewController的子类。拥有一个名为view的实例变量。

        2. 视图控制对象的作用是充当其视图的控制器对象。此外,通常还需要一个对像来负责视图的交换工作。

        3. 有两种创建视图的方法,一种是用代码创建视图,一种是创建xib文件。如何决定使用那种方法,这里有一条经验法则:

           当视图控制器对象只有一个视图的时候(没有子视图),那么用代码来创建单个视图通常会更容易。如果视图有子视图,就通过xib文件创建。

        4.  使用视图控制对象时,不会直接修改视图层次结构。UIWindow实现了一个名为setRootViewController:的方法。将UIViewController实例作为参数传入该方法,传入

的视图控制对象的视图会自动加入窗口,成为窗口的子视图并调整大小和窗口保持一致。窗口对象会保留它的跟视图对象。

         此处附图:

       5. 需要创建视图时,视图控制对象会调用loadView方法。创建UIViewController实例后,其下的视图不会马上被创建,要等到视图控制对象的视图加入视图层次结构后

       (即视图第一次出现在屏幕上时)才会创建。

6.创建 UIViewController子类的实例时,通过指定的初始化方法 initWithNibName:bundle:传入的XIB文件的文件名。当视图控制对象需要使用实例变量view的时候,会查看应用程序包内是否存在相应的xib文件(如果传入的名称时nil,那么UIViewController对象会查找和这个UIViewController子类的类名匹配的xib文件)。接着视图对象会载入找到的xib文件。

        7.loadView方法负责完成上述XIB载入过程。UIViewController的默认loadView方法会查找并载入XIB文件,所以在编写通过XIB文件载入视图的UIViewController子类时,不要覆盖loadView。而在编写通过代码创建视图的UIViewController子类时,就必须覆盖loadView,避免载入XIB文件。

        8.UIViewController会在特定的时刻调用一下方法。

       * viewWillAppear:当UIViewController对象的视图即将加入窗口时调用

       *viewDidAppear:当UIViewController对象的视图已经加入窗口时调用

       *viewWillAppear:当UIViewController对象的视图即将消失,被覆盖或是隐藏时调用。

       *viewDidDisappear:当UIViewController对象的视图已经消失,被覆盖或是隐藏时调用。

虽然某个UIViewController对象只会创建一次,但是他的视图通常会显示(移除或消失)多次。所以通常需要覆盖视图控制对象在这些时刻的默认行为。

UIViewController中的这些方法不做任何事情,仅供子类覆盖。

    8.和其它对象一样,视图控制对象也是通过alloc和init创建的。但是视图控制对象不会在创建的那一刻马上创建相应的视图,而是要等到真正的需要试图时,才会通过调用loadView来创建。这种延迟创建的做法能提高内存的使用效率。例如:如果某个标签条有很多UIViewController对象,那么任何一个UIViewController对象的视图,只会在相应的标签项被选中时才会被创建出来。视图控制对象会在收到view消息的那一刻载入视图。

- (UIView *)view

{

if( [self isViewLoaded] == NO)

       {

            [self loadView];

            [self viewDidLoad];

       }

      return self;

}

这段代码的作用,一旦某个视图控制对象要求获取视图试图控制对象的视图,并且该视图还不存在,那么视图控制对象就会创建一个视图。

9.视图控制对象的视图可以有子视图,其中一些子视图会作为插座变量和视图控制对象关联。当对象A和插座变量建立关联后,拥有插座变量的对象B会保留对象A。此外,因为父视图会保留他的子视图,所以A的retain计数会是2。

  当发生内存过低警告时,视图控制对象会释放它的视图。释放视图时,视图会向他的子视图发送release消息。但是视图控制对象依然保留这一个A的retain计数。

所以,在视图控制对象卸载他的视图时,应该向所有的插座变量发送release消息。否则这些变量最终会被新创建的对象替换掉。一般可以在viewDidUnload中完成这个任务。

   释放视图控制对象时,不会调用该对象的viewDidUnLoad方法(但是其视图还是会被释放),所以,是被释放的视图控制对象必须在dealloc中释放所有的插座变量。

10.  牢记:视图和它的视图控制对象时两个分开的对象。在视图控制对象的生命周期里,它的视图可以创建,在窗口中显示,从窗口中移除,释放和再次创建多次。我们可以认为视图是一种可以再生的资源,视图控制对象通过该资源与用户沟通。

转载于:https://my.oschina.net/loverapple/blog/109875

你可能感兴趣的文章
Quartz 开源任务调度框架
查看>>
SASS界面编译工具——Koala的使用
查看>>
JSP放入Jar包支持
查看>>
润乾报表使用json数据源的方法改进
查看>>
小蚂蚁学习PS切图之基础操作(2)——工具栏的介绍
查看>>
【Mybatis】- sqlSession工作流程
查看>>
mysql str_to_date字符串转换为日期
查看>>
jsp---EL运算符
查看>>
Oracle中的substr方法
查看>>
Mysql日期和时间函数总结
查看>>
创建逻辑卷 安装lvm命令
查看>>
不使用root身份运行Wireshark
查看>>
PageRank算法计算网页的价值
查看>>
js面向对象
查看>>
DEDECMS 修改广告链接地址
查看>>
抓住“扁平化”
查看>>
Python中method的参数传递详解
查看>>
Skia深入分析1——skia上下文
查看>>
Tiny Jpeg Decoder (JPEG解码程序) 源代码分析 1:解码文件头
查看>>
windows Server2008 下部署nginx
查看>>