今天给你们介绍一下Apple开发中三种几种经常使用的应用程序编写方式:纯代码建立、使用storyboard/XIB。咱们都知道,纯代码编写模式适合大型项目大规模使用,利于版本管理、追踪改动以及代码合并,代码重用性强,代码后期维护方便快捷。可是咱们不可否认它开发周期长,代码结构复杂,自动布局AutoLayout困难等缺点,ios
1、Interface Builder介绍程序员
一、概念编程
Interface Builder苹果平台下用于设计和测试用户界面的应用程序,简称IB。简单理解,IB就是提供可视化设计环境。数组
Interface Builder,是用于苹果公司 Mac OS X 操做系统的软件开发程序,Xcode 套件的一部分xcode
Interface Builde :是可视化建立界面描述文件的工具,打开xib能够看到xml的文件结构iview
Xcode.3.0 以前 Interface Build 建立的文件是二进制nib nib表明Next interface Builder 由于nib是二进制很差管理 也不方便版本控制xcode.3.0 以后 interface builder 使用了一种新的文件格式xib xib的意思是XML interface builder, xib 使用了XML 在工程编译的时候在转换成nib函数
xcode 4.0 以前 interface Builde 是一个独立软件, 而Xcode 4.0 是个大版本 界面被从新设计 interface Builder 被直接集成到xcode 工具
注意点: 当咱们用xib 会遇到 xib 添加到控制器view 中有时程序会崩溃 布局
错误提示: unrecognized selector sent to instance 0x7ffae1c1b680'测试
这时咱们应注意xib里控件有几个 ,咱们加载xib 会以数组的形式加载 xib对象是按照方进去的顺序排列的
二、做用及特色
IB给用户提供了可视化的操做界面,能够很方便而且直观的设计出用户界面元素。IB提供的拖放面板,使用拖拽就能够方便的构建出UI界面。使用IB是可选的,由于全部控件均可以使用代码来实现。
三、集成
Interface Builder工具是在iPhone SDK中提供的,应用于Mac OC 和iOS应用开发,从Xcode4开始,集成到了其中(以前是独立的软件)。
四、Nib元素
(1) Nib文件是保存由Interface Builder建立的对象及对象间关系的一种资源文档,Nib 是 NeXT Interface Builder的缩写。
(2)早期,IB使用Nib文件存储控件资源,Nib自己是二进制文件。
五、Xib的出现
(1)自从Xcode 3.0 开始,苹果提供Xib文件构建UI元素,本质是XML文本文件,能够很方便的编辑。同时Xib能够编译为Nib。
(2)Nib 和 Xib都是 Interface Builder 的图形界面设计文档。
2、xib介绍
一、简介
(1)IB和xib是从iOS SDK初次面世开始就是捆绑在开发者工具套装内的内容了(独立),而到了Xcode 4以后更被直接集成到了Xcode中成为了IDE的一部分。
(2)Xib是XML格式的文件。
(3)UIViewController生命周期函数loadView以前,Xib会转化成可执行的nib文件
二、使用
(1)经过xib加载控件
<1>loadNibNamed 方法
(2)经过xib加载控制器
<1>initWithNibName: bundle:方法 (若是xib和控制器名字相同或近似,能够不用实例化)
<2>设置xib的身份检查器中的关联
<3>设置File's Owner ,拖动到View上
三、优点
(1)相比纯代码,大大缩短了UI界面搭建的时间,提升了开发效率。
(2)可视化的效果,更直观的设计
(3)在版本管理上和纯代码的差别并非很大,易读易维护。
四、问题
(1)Xib没法进行逻辑判断。
(2)很难在运行时进行配置,Xib在使用时,常常要经过代码的补充,来完成功能实现。
(3)多人开发中经过代码修改Xib的属性,可能形成混乱和不可预计的问题。
(4)从程序员角度,可读性较差。不利于统一管理和维护。使用SVN等代码管理工具时,Xib会产生无用的记录,以及版本更新的缺陷。从Xcode5开始,苹果对这一方面问题进行了优化,好比在版本管理上,也能够很好的查找修改记录了。
(5) xib中的设置每每并不是最终设置,UI设计会被代码所覆盖
(若是选择xib,那么要尽可能将xib的工做和代码的工做隔离开来:可以使用xib完成的内容就统一使用xib来作,而不要说三个Label其中两个在 xib设置了字体而另外一个却在代码中完成。尽可能仅保持必要的、较少的IBOutlet和IBAction会是一个好方法。)
六、几个和Xib相关的方法
(1)loadNibNamed: owner: options 加载Xib控件
(2)aweakFromNib 经过Xib加载控件,会调用关联类中的此方法
(3)initWithCoder 经过Xib加载控件,会调用关联类中的此方法
3、storyBoard
一、 简介
iOS5版本后,苹果公司推出Storyboard,目前新建立工程时默认自带Storyboard,能够说StoryBoard是将来的趋势.
1.什么是Storyboard?
咱们从字面能够理解为 故事板 Storyboard的是 ios5 的新特征 目的是代替历史悠久的xib
Storyboard 是多个xib文件集合的描述文件,也采用xml格式
若是要使用Storyboard特性,那么AppDelegate必须继承自UIResponder类, 以前则是继承自NSObject类的,并且必须有一个不是UIOutlet类的Window属性声明才能够
注意点: 当咱们须要更换Stoard 咱们须要把infor.plist Main interface 里的东西 删除 不然会报错
二、特色
(1)提供页面间新的挑战方式:segue
(2)描述了若干窗体、组件、Auto Layout 约束等关键信息。
(3)默认storyBoard做为程序的主入口
(4)Auto Layout 跟 StoryBoard 的配合使用,能够大幅提升 UI 开发效率,并准确提供出各控件的位置和约束。
(5)storyBoard中是展示控制器之间的关系。
三、优点
(1)storyboard在IOS5引入,是xib集合的描述文件,自己也是xml格式;提供了nib 和 xib 的集中管理,更直观的展示出他们的关系。
(2)提升UI设计效率的同时,经过可视化界面,能够很清晰的反映出控制器之间的跳转关系。
(3)在storyBoard中能够提供简单的页面跳转,拖拽就能够设置成功。
(4)UI设计中能够实时直观的反映设计效果,因为代码量较少,因此,bug产生的概率也较低(代码实现UI须要大量代码)。
(6)代码量少,开发周期短
(7)是新建项目时候的默认配置,表明着苹果之后的方向和重心将倾向于可视化编程。
四、使用
(1)经过storyBoard加载控制器
<1> 建立UIStoryboard 对象: storyboardWithName:
<2> 经过storyBoard对象建立
instantiateInitialViewController;
instantiateViewControllerWithIdentifier;
(2)经过storyBoard加载视图,
<1> 在Prototype cells 中设置样式,和reusedID,能够实现cell重用。
<2> collection中的item注册,也能够经过Prototype cells
五、问题
(1)存在Xib设计中相同的一些问题,好比维护的不方便,多人开发的不便利,没有逻辑判断等等。
(2)最大问题就是多人协做开发,UI控件都在一个storyBoard文件中。
(3)由于是多个Xib,多以会更大一些,加载会慢一些。
(4)因为没有使用代码设计控件,因此重用问题不灵活。
4、xib 和 Storyboard 的区别
共同点 : 都用来描述软件的界面 都用Interface Buile工具编译
不一样点 :(1)xib是轻量级 用来描述局部的UI界面;而Storyboard 是重量级 用来描述整个软件的多个界面 而且 能展现多个界面之间的跳转关系
(2) storyboard是多个xib文件集合的描述文件,也采用xml格式。一个工程中能够有多个xib文件,一个xib文件对应着一个视图控制器和多个视图。而使用storyboard时,一个工程只须要一个主storyboard文件就能够了。所以,在包含多个视图控制器的状况下,采用storyboard管理比较方便,并且storyboard还能够描述界面之间的导航关系。
5、使用storyboard的注意点。
使用Storyboard需注意:
一、若是要使用Storyboard特性,那么AppDelegate必须继承自UIResponder类, 以前则是继承自NSObject类的,并且必须有一个不是UIOutlet类的Window属性声明才能够
二、StoryBoard专有的preview功能,以及AutoLayout的功能。
三、StoryBoard中已经不容许有单个view的存在
6、简述XIB和storyboard的使用方法。
xib使用过程:
1. 首先使用interface builder 新建一个uiview的.xib文件。
2. 向新建的uiview的.xib文件添加须要的控件。
3. 定义一个继承自uiview的派生类。将上面新建的xib文件的派生类改成新定义的继承自uiview的派生类。
4. 将在xib文件上添加的控件与继承自uiview的派生类创建链接IBOoutlet。
5. 在须要生成uiview的地方添加一下代码:
NSArray* nibView = [[NSBundlemainBundle] loadNibNamed:@"xib文件名字"owner:nil options:nil];
UIView * backupSearchView = [nibView lastObject];
storyboard使用过程:
// 1.建立窗口
self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
// 2.建立控制器[storyboard故事板]
// 2.1 先加载故事板文件
UIStoryboard *boss = [UIStoryboard storyboardWithName:@"CZBoss" bundle:nil];
// 2.2 实例化初始化控制器[带箭头]
// UIViewController *vc = [boss instantiateInitialViewController];
//根据表示符,实例化控制器
UIViewController *vc = [boss instantiateViewControllerWithIdentifier:@"blue"];
// 3.设置窗口的根控制器
self.window.rootViewController = vc;
// 4.把窗口做为主窗口并可见
[self.window makeKeyAndVisible];