Xib拾遗
简单介绍一下iOS开发中常用到的Xib
Interface Builder 是什么?
Apple Interface Builder 即苹果界面生成器,可以用图形化的方式,用鼠标拖放各种控件来创建用户界面,而无需编写代码(下文中简称IB)。(传统创建界面的方式有纯代码创建、xib创建、storyBoard创建)
在Xcode 4.0之前,IB是个独立的软件,后被直接集成到Xcode中。
Xcode 3.0之前IB创建的文件是二进制格式nib(NeXT Interface Builder),因二进制格式不好管理及版本控制等原因,Xcode 3.0之后,IB创建的文件使用了新的类型即xib(可能为XML Interface Builder),其源文件为XML格式,工程编译的时候再转换为nib.
Xib是什么?
工程中新建一个view的xib,删除冗余只留下关键标签如下:
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0">
<objects>
<view contentMode="scaleToFill" id="iN0-l3-epB">
<rect key="frame" x="0.0" y="0.0" width="414" height="896"/>
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</view>
</objects>
</document>
如上,为XML格式的界面描述文件(相对于新建空白xib,objects标签下多了view标签,如果添加其他控件后,会自动生成subviews标签)
为什么使用XML格式?
使用一个文本文件来描述对象的结构,或者作为一个配置文件(比如plist文件),为什么使用XML格式?常用的配置文件格式有哪些?
配置文件常见格式有ini、json、xml(plist/properties)、yaml、toml等(一些特别的案例,比如cocoapods的podfile可以理解为ruby语法)
ini文件,线性结构,是windows系统配置文件所采用等存储格式,配置简单方便,复杂类型数据描绘乏力
json/xml/yaml等为层次结构,解析困难,表达能力强大
xml灵活且易于编写,缺点是冗长,人类和机器都难于阅读(难道plist文件好读吗?)
json大多数解析器不支持注释,不合适于配置文件需要人类阅读编写的场景(是吗?),json简洁明了,删除了xml中大量的废话
数据序列化是从一个系统获取一些信息,将其转换为其他系统可以读取等格式并传递的过程,大多分为两类:1.易于人类读写 2.易于机器读写
有人说这些都是S-表达式的马甲(是吗?)
S-表达式是什么?
S-表达式(symbolic-expression符号表达式),是指一种以人类可读的文本形式表达半结构化数据的约定(lisp中为一种能递归地表示数字、操作符及其他列表的树形数据结构)。
一般来说,S-表达式可以理解为XML简化版本(同样都能表示树形数据的情况下,S-表达式独特的前缀表达式+()分隔的结构,显得更简洁)
XML如何解析?
Interface Builder 还能用来做什么?
我们绝大多数情况下只使用IB来创建界面,其实IB可以配置创建任何NSObject对象。
如何操作?
展望(开始扯淡)
有人说现代编程语言和软件开发工具的一个发展方向是把开发者当成用户,而不是充分信任开发者。
因此使得开发工具在设计上尽量封装不必关心的东西。
封装造成了两种趋势:
1.界面与代码设计分离 2.应用设计与底层实现分离
Interface Builder的初衷可能是希望帮忙开发者节省写界面的时间;可视化,表现层和数据层是很好的思想。
缺点:多人协作困难,可复用性降低(真的是这样吗?)