1:可读性

2:可视化界面、立马看到

3:开发速度。

4:复用性

5:维护性差

本质

编译时对xml文件做了如下操作
1,读取xml文件,生成所有界面对象,生成所有object(即自定义的controller类等),设置好各个obejct之间的联系(IBAction,IBOutlet)
2,对这一坨对象进行序列化,即调用encodeWithCoder方法来序列化,生成二进制nib文件
为什么要生成二进制文件,因为从二进制文件生成类实例更快一些。

运行时对nib的操作
1,反序列化,调用所有对象的initWithCoder方法
2,某些类的initWithFrame,init之类的方法被调用,生成所有类实例
3,发送awakeFromNib消息,每个类实例的awakeFromNib被调用

    1. 提取nib文件到内存中
      Bundle中取出nib文件,为二进制文件,加入到内存中

    2. 对原xib中所有view对象进行解档
      a) 从内存中的二进制数据,取出原xib中的各view对应那部分data
      b) 通过调使用initWithCoder:初始化方法,创立原xib中的所有view,将上面的那部分data作为入参传入
      c) 这里是每个view进行反序列化,将二进制文件转为实际的类。实际上不需要我们亲身来反序列化,在initWithCoder:方法中调使用[super initWithCoder:coder]就可,系统的根类中已经默认做好了
      d) 注意❗️:每个view(包括顶级对象view)在xib中绑定的什么类,就会创立这个类。例如一个View没有绑定类名,默认系统的UIView类,那么实际就是调使用的[UIView initWithCoder:aData],这个view解档完成后就是UIView的实例;假如一个View绑定类名为CustomView,那么实际就是调使用的[CustomView initWithCoder:aData],而后就进入到CustomView类中的initWithCoder:方法了,这个view解档完成后就是CustomView的实例。
      e) 注意❗️:在initWithCoder:方法中,不可以用xib、SB连线出来的属性,此时连线的属性都为nil,由于现在还没开始关联属性

    3. 关联属性和方法
      对连线到自己类File OwnerObject中的属性进行弱引使用关联,并关联事件。而后这三个地方即可以用连线过来的属性和响应连线的过来方法了。(下面会讲怎样连线到这三个地方)

    4. 解档完成
      原xib中各个view解档完成后,调使用各自的awakeFromNib方法,告诉你xib已经完全ok,能直接用了。现在你能在awakeFromNib方法中,用xib、SB连线出来的属性了。

一: 纯手写代码

优点:

1: 易读性比较高,可以实现复杂逻辑功能。

2: 代码复用性非常高(前提是你提前封装过)

缺点

1: 不能所见所得,每次都要重新运行才能看到效果

2: 在制作界面的时候需要很多代码量,多的代码以为着会引入潜在的bug,写多代码也意味着浪费时间

二:使用xib开发

优点:

1: xib是苹果提供一种可视化界面开发方式,可以轻松进行拖拉控件,快速搭建一个界面。

2: 能非常清晰清楚单个界面的层次关系

3: xib复用性比较高

4: 开发速度快

缺点

1: 需求变更时,需要改变xib很大,维护性比较差

2: 在svn提交工程中非常容易造成冲突

三: 使用storyboard 故事版开发

优点:

1: storyboard是苹果在iOS5之后提供一种全新制作UI方式,他提供了非常强大界面可视化,可以快速进行拖拉界面,完成自己APP.

2:可以非常清晰看出每个控制器(View Controller)中界面逻辑关系,结构非常一目了

3: 开发速度快

缺点

1: 在开发过程中,只要点击一下storyboard,不做任何修改,SVN工具就要提醒重新提交,非常蛋疼。

2: 用过storyboard人都知道,storyboard复用性很差。

3: 在团队开发者中,极易造成冲突。

07 (OC)* XIB原理和Xib、storyBoard、代码的优缺点的更多相关文章

  1. 转换流的原理和OutputStreamWriter介绍&代码实现

    转换流的原理 OutputStreamWriter介绍&代码实现 package com.yang.Test.ReverseStream; import java.io.FileNotFoun ...

  2. 树的深度优先遍历和广度优先遍历的原理和java实现代码

    import java.util.ArrayDeque; public class BinaryTree { static class TreeNode{ int value; TreeNode le ...

  3. **IOS:xib文件解析(xib和storyboard的比较,一个轻量级一个重量级)

    使用Xcode做iOS项目,经常会和Xib文件打交道,因为Xib文件直观的展现出运行时视图的外观,所以上手非常容易,使用也很方便,但对于从未用纯代码写过视图的童鞋,多数对Xib的理解有些片面. Xib ...

  4. iOS开发之 Xcode6 添加xib文件,去掉storyboard的hello world应用

    iOS开发之  Xcode6.1创建仅xib文件,无storyboard的hello world应用 由于Xcode6之后,默认创建storyboard而非xib文件,而作为初学,了解xib的加载原理 ...

  5. 单链表反转的原理和python代码实现

    链表是一种基础的数据结构,也是算法学习的重中之重.其中单链表反转是一个经常会被考察到的知识点. 单链表反转是将一个给定顺序的单链表通过算法转为逆序排列,尽管听起来很简单,但要通过算法实现也并不是非常容 ...

  6. iOS开发——实战OC篇&环境搭建之纯代码(玩转UINavigationController与UITabBarController)

    iOS开发——实战OC篇&环境搭建之纯代码(玩转UINavigationController与UITabBarController)   这里我们就直接上实例: 一:新建一个项目singleV ...

  7. 控制器与xib关联(用xib布局控制器)

    IOS Xib使用——为控制器添加Xib文件 Xib文件是一个轻量级的用来描述局部界面的文件,它与StoryBoard类似,都是使用Interface Bulider工具进行编辑.但是StoryBoa ...

  8. iOS开发UI篇—程序启动原理和UIApplication

    iOS开发UI篇—程序启动原理和UIApplication   一.UIApplication 1.简单介绍 (1)UIApplication对象是应用程序的象征,一个UIApplication对象就 ...

  9. iOS开发UI篇—程序启动原理和UIApplication1

    iOS开发UI篇—程序启动原理和UIApplication   一.UIApplication 1.简单介绍 (1)UIApplication对象是应用程序的象征,一个UIApplication对象就 ...

随机推荐

  1. js-获取屏幕的中各种宽高

    网页可见区域宽:document.body.clientWidth 网页可见区域高:document.body.clientHeight 网页可见区域宽:document.body.offsetWid ...

  2. python学习笔记(3)--函数、参数、变量、递归

    1.函数基本语法和特性 背景摘要 现在老板让你写一个监控程序,监控服务器的系统状况,当cpu\memory\disk等指标的使用量超过阀值时即发邮件报警,你掏出了所有的知识量吗,写出了以下代码 whi ...

  3. centos6.8启动防火墙的艰辛过程

    首先我的/etc/sysconfig/iptables文件没有. 解决办法: 1.任意运行一条iptables防火墙规则配置命令: iptables -P OUTPUT ACCEPT 2.对iptab ...

  4. Android开发之输入框EditText介绍

    这篇文章主要为大家详细介绍了Android布局之输入框EditText设计,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 现在先简单介绍一下技术点: 1.如何使用圆角输入框和按钮背景 2.如何实现 ...

  5. Vue实现静态数据分页

    <div style="padding:20px;" id="app"> <div class="panel panel-prima ...

  6. POJ - 3660 Cow Contest 传递闭包floyed算法

    Cow Contest POJ - 3660 :http://poj.org/problem?id=3660   参考:https://www.cnblogs.com/kuangbin/p/31408 ...

  7. ccpc网赛 hdu6705 path(队列模拟 贪心

    http://acm.hdu.edu.cn/showproblem.php?pid=6705 这是比赛前8题过的人数第二少的题,于是就来补了,但感觉并不难啊..(怕不是签到难度 题意:给个图,给几条路 ...

  8. hdu 3577 Fast Arrangement(线段树区间修改,求区间最小值)

    Problem Description Chinese always have the railway tickets problem because of its' huge amount of p ...

  9. 牛客第五场多校 J plan 思维

    链接:https://www.nowcoder.com/acm/contest/143/J来源:牛客网 There are n students going to travel. And hotel ...

  10. yzoj1657货仓选址 题解

    题面: 在一条数轴上有N家商店,它们的坐标分别为 A[1]~A[N].现在需要在数轴上建立一家货仓,每天清晨,从货仓到每家商店都要运送一车商品.为了提高效率,求把货仓建在何处,可以使得货仓到每家商店的 ...