07 (OC)* XIB原理和Xib、storyBoard、代码的优缺点
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被调用
提取nib文件到内存中
从Bundle中取出nib文件,为二进制文件,加入到内存中对原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,由于现在还没开始关联属性关联属性和方法
对连线到自己类、File Owner、Object中的属性进行弱引使用关联,并关联事件。而后这三个地方即可以用连线过来的属性和响应连线的过来方法了。(下面会讲怎样连线到这三个地方)解档完成
原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、代码的优缺点的更多相关文章
- 转换流的原理和OutputStreamWriter介绍&代码实现
转换流的原理 OutputStreamWriter介绍&代码实现 package com.yang.Test.ReverseStream; import java.io.FileNotFoun ...
- 树的深度优先遍历和广度优先遍历的原理和java实现代码
import java.util.ArrayDeque; public class BinaryTree { static class TreeNode{ int value; TreeNode le ...
- **IOS:xib文件解析(xib和storyboard的比较,一个轻量级一个重量级)
使用Xcode做iOS项目,经常会和Xib文件打交道,因为Xib文件直观的展现出运行时视图的外观,所以上手非常容易,使用也很方便,但对于从未用纯代码写过视图的童鞋,多数对Xib的理解有些片面. Xib ...
- iOS开发之 Xcode6 添加xib文件,去掉storyboard的hello world应用
iOS开发之 Xcode6.1创建仅xib文件,无storyboard的hello world应用 由于Xcode6之后,默认创建storyboard而非xib文件,而作为初学,了解xib的加载原理 ...
- 单链表反转的原理和python代码实现
链表是一种基础的数据结构,也是算法学习的重中之重.其中单链表反转是一个经常会被考察到的知识点. 单链表反转是将一个给定顺序的单链表通过算法转为逆序排列,尽管听起来很简单,但要通过算法实现也并不是非常容 ...
- iOS开发——实战OC篇&环境搭建之纯代码(玩转UINavigationController与UITabBarController)
iOS开发——实战OC篇&环境搭建之纯代码(玩转UINavigationController与UITabBarController) 这里我们就直接上实例: 一:新建一个项目singleV ...
- 控制器与xib关联(用xib布局控制器)
IOS Xib使用——为控制器添加Xib文件 Xib文件是一个轻量级的用来描述局部界面的文件,它与StoryBoard类似,都是使用Interface Bulider工具进行编辑.但是StoryBoa ...
- iOS开发UI篇—程序启动原理和UIApplication
iOS开发UI篇—程序启动原理和UIApplication 一.UIApplication 1.简单介绍 (1)UIApplication对象是应用程序的象征,一个UIApplication对象就 ...
- iOS开发UI篇—程序启动原理和UIApplication1
iOS开发UI篇—程序启动原理和UIApplication 一.UIApplication 1.简单介绍 (1)UIApplication对象是应用程序的象征,一个UIApplication对象就 ...
随机推荐
- Go_笔试题记录-指针与值类型实现接口的区别
1.如果Add函数的调用代码为: func main() { var a Integer = 1 var b Integer = 2 var i interface{} = &a sum := ...
- Django Mysql数据库-F查询和Q查询
一.F查询和Q查询 F查询: 在上面所有的例子中,我们构造的过滤器都只是将字段值与某个常量做比较.如果我们要对两个字段的值做比较,那该怎么做呢? Django 提供 F() 来做这样的比较.F() 的 ...
- 缓冲区溢出实例(一)--Windows
一.基本概念 缓冲区溢出:当缓冲区边界限制不严格时,由于变量传入畸形数据或程序运行错误,导致缓冲区被填满从而覆盖了相邻内存区域的数据.可以修改内存数据,造成进程劫持,执行恶意代码,获取服务器控制权限等 ...
- 逆向破解之160个CrackMe —— 016
CrackMe —— 016 160 CrackMe 是比较适合新手学习逆向破解的CrackMe的一个集合一共160个待逆向破解的程序 CrackMe:它们都是一些公开给别人尝试破解的小程序,制作 c ...
- WPF中查看PDF文件 - 基于开源的MoonPdfPanel (无需安装任何PDF阅读器)问题汇总
致敬Yang-Fei—有一个简单的用法示例: http://www.cnblogs.com/yang-fei/p/4885570.html. 写MoonPdfPanel的哥们关于这个开源软件的实现介绍 ...
- 修改jdk注册表
如果是新增jdk的话就选中java Development kit 文件夹右击新建,然后把属性配置上就可以
- 05_指针之New()函数的使用
1.new函数是一个内置函数,表达式new(T)创建一个未命名的T类型变量,初始化为T类型的零值,并返回其地址(地址类型为*T)2.p:=new(int),q:=new(int)==>p!=q ...
- Spring Boot 2.0 教程 | 快速集成整合消息中间件 Kafka
欢迎关注个人微信公众号: 小哈学Java, 每日推送 Java 领域干货文章,关注即免费无套路附送 100G 海量学习.面试资源哟!! 个人网站: https://www.exception.site ...
- P3355 骑士共存问题 二分建图 + 当前弧优化dinic
P3355 骑士共存问题 题意: 也是一个棋盘,规则是“马”不能相互打到. 思路: 奇偶点分开,二分图建图,这道题要注意每个点可以跑八个方向,两边都可以跑,所以边 = 20 * n * n. 然后di ...
- CF - 1108 F MST Unification
题目传送门 题意:在一幅图中, 问需要使得多少条边加一,使得最小生成树只有一种方案. 题解:Kruskal, sort完之后,对于相通的一个边权w,我们可以分析出来有多少边是可以被放到图里面的,然后我 ...