很清楚,这就是iOS里面两种可视化UI的方法。加上全部用代码来实现UI,总共有三种方法可以来实现。

我们先说一下全用代码来做,这个方法属于比较极端的程序员所推崇的,优点和缺点同样明显。

优点是可以实现所有的功能,用Nib文件和Storyboard可以实现的功能用代码都能实现,不能实现的一些功能,用代码也能实现;另外用代码方便多人共同开发项目,版本管理比较方便,Nib文件和Storyboard这点上就是致命伤了(Xcode5之后好了不少),最后一个就是这种开发方法很有高大上的感觉,可以让程序员自我迷醉

缺点是代码不够直观,而且冗余很重。直接看代码你很难对一个View马上有个大体的印象,需要运行起来才能完整的看到全貌;至于代码冗余也很好理解,你看见View初始化之后都是一堆堆的设置frame,各种target-action的设置,也会觉得冗余的。

Nib文件是用InterfaceBuild来辅助做可视化的UI设计的文件,如果你用过微软的VisualBasic,VisualC++等等可视化开发语言的话,对这个概念应该不陌生。

用这个来开发UI同样让你欢喜让你忧,欢喜的是简单地UI确实比较方便,用鼠标拖拉一下,再加上一些设置就可以做出来了。忧的是这个功能实际上是用xml来存下View里面的内容,Xcode5之前打开文件,不加任何修改都能发现变化了,版本管理时满文件都是红色的,在多人修改到同一个文件时简直就是噩梦,Xcode5之后好了不少,但小组开发时少方便仍然是存在的问题。用Nib文件生成的UI,用代码都可以进行修正,我们往往会在Nib文件里面设置一部分,然后再代码中修正实现另外一部分,这样的编码方法容易起一些冲突,有时会让人很头晕。还有一点,这样生成的内容在不同的项目中复用是很难实现的。

Storyboard实在iOS5之后出现的概念,2011年的WWDC的Session309《Introducing Interface Builder Storyboarding》里面提出来的。这个东西的出现是为了弥补Nib文件仅仅针对一个View,没有针对整体应用流程的改进,同时它可以进一步节省代码。试用了一下,一个简单的例子,见下图:

个人的感觉嘛,怎么说呢,觉得一个人开发的简单项目中使用还是很不错的。应用的流程比较清晰,可以做到一目了然,View的切换是自动的,避免了用代码来做,可以进一步减少开发的工作量。缺点还是不适合多人共用,一个board多人一起维护的情形想想就觉得没那么简单,当然,有看到说应用并非只有一个board,每人可以用自己的board来开发。我承认,这样做会减少很多麻烦,但仍然感觉给版本管理带来了不小的麻烦(退化到极限,不就是Nib文件了么),另外,不管怎么说,代码的复用确实是变得困难了。

要说明的是,Storyboard和Nib文件并非是非此即彼的互斥关系,在用了Storyboard的应用中也可以用Nib文件,这对实现一些复杂的UI是有帮助的。当然,代码必不可少的需要增加一些。

我所从事的开发中,从来没用过纯用代码来实现UI,感觉这样做实现/调试/维护都不方便。很多项目由于有历史包袱,目前都是用Nib文件的方法在开发维护,新的应用感觉比较小巧,一个人能开发过来的,决定用Storyboard来实现,慢慢逐渐转向用Storyboard来开发。毕竟苹果对于这个工具持续在改进,也是未来力推的一个方向。

Storyboard、Nib文件和代码来实现UI的利与弊的更多相关文章

  1. 使用XML布局文件和Java代码混合控制UI界面

    完全使用Java代码来控制UI界面不仅烦琐.而且不利于解耦:而完全利用XML布局文件来控制UI界面虽然方便.便捷,但难免有失灵活.因此有些时候,可能需要混合使用XML布局文件和代码来控制UI界面. 当 ...

  2. 【Xamarin挖墙脚系列:代码手写UI,xib和StoryBoard间的博弈,以及Interface Builder的一些小技巧(转)】

    正愁如何选择构建项目中的视图呢,现在官方推荐画板 Storybord...但是好像 xib貌似更胜一筹.以前的老棒子总喜欢装吊,用代码写....用代码堆一个HTML页面不知道你们尝试过没有.等页面做出 ...

  3. 代码手写UI,xib和StoryBoard间的博弈,以及Interface Builder的一些小技巧

    近期接触了几个刚入门的iOS学习者,他们之中存在一个普遍和困惑和疑问.就是应该怎样制作UI界面.iOS应用是非常重视用户体验的,能够说绝大多数的应用成功与否与交互设计以及UI是否美丽易用有着非常大的关 ...

  4. 关于代码手写UI,xib和StoryBoard

    代码手写UI 这种方法经常被学院派的极客或者依赖多人合作的大型项目大规模使用.Geek们喜欢用代码构建UI,是因为代码是键盘敲出来的,这样可以做到不开IB,手不离开键盘就完成工作,可以专注于编码环境, ...

  5. nib文件的注册及加载

    1,注册 [(UIView *)view registerNib:[UINib nibWithNibName:(NSString *)nibName bundle:(NSBundle *)bundle ...

  6. 什么是Nib文件?(Nib文件是一种特殊类型的资源文件,它用于保存iPhone OS或Mac OS X应用程序的用户接口)

    Nib文件是一种特殊类型的资源文件,它用于保存iPhone OS或Mac OS X应用程序的用户接口.Nib文件是Interface Builder文档.通常您会使用Interface Builder ...

  7. 如何打开Nib文件

    作者:ani_di  版权所有,转载务必保留此链接 http://blog.csdn.net/ani_di # 如何打开Nib文件 有段时间没有灌水,今天分享一个小技巧. nib文件是Cocoa Ap ...

  8. 在代码中控制UI界面

    虽然Android推荐使用XML布局文件来控制UI界面,但如果开发者愿意,Android允许开发者完全抛弃XML布局文件,完全在Java代码中控制UI界面. 实例:用编程的方式开发UI界面 packa ...

  9. 在Team Foundation Server (TFS)的代码库或配置库中查找文件或代码

    [update 2017.2.11] 最新版本的TFS 2017已经增加了代码搜索功能,可以参考这个链接 https://blogs.msdn.microsoft.com/visualstudioal ...

随机推荐

  1. FileMode枚举

    FileMode枚举是一个简单枚举,用于指定操作系统打开文件的方式. 枚举成员 成员值 描述 CreateNew 1 指定操作系统应创建新文件,如果文件存在则引发异常. Create 2 指定操作系统 ...

  2. UESTC_Sliding Window 2015 UESTC Training for Data Structures<Problem K>

    K - Sliding Window Time Limit: 18000/6000MS (Java/Others)     Memory Limit: 131072/131072KB (Java/Ot ...

  3. 代码中实际运用memcached——mycode

    1.下载安装64位memcached.exe  下载地址:http://blog.couchbase.com/memcached-windows-64-bit-pre-release-availabl ...

  4. ORM框架Hibernate (一) 对DAO封装和抽象

    说明 前面已经给大家介绍了Struts这个框架,Struts是对Web项目的表示层进行了封装,而Hibernate是对Web项目中DAO层进行封装,也即是.NET中我们常用到的D层封装,即对访问数据库 ...

  5. 【常用小命令】解决windows下有些文件文件名识别不了导致删除不了的问题

    在百度上找的解决方案哈,只为自己存档一份. 因为发现现在从csdn上下载的文件都是“.pdf_”格式,下载2个文件,将一个文件格式改成 “.pdf”,另一个文件就扔回不了回收站了, 所以没有办法就找各 ...

  6. ubuntu python PyCharm virtualenv

    1.安装virtualenv 参照:http://docs.jinkan.org/docs/flask/installation.html 2.PyCharm结合virtualenv开发应用 PyCh ...

  7. Oracle表分区[转]

    废话少说,直接讲分区语法. Oracle表分区分为四种:范围分区,散列分区,列表分区和复合分区. 一:范围分区 就是根据数据库表中某一字段的值的范围来划分分区,例如: create table gra ...

  8. 也谈谈关于WEB的感想

    距离上次在博客园发表博文已经是数年以前了,想想自己也确实有够懒惰的,实为不该. 引起我想发这篇博文的原因是 @Charlie.Zheng 所发表的 <Web系统开发构架再思考-前后端的完全分离& ...

  9. css 兼容小三角

    <!DOCTYPE><html ><head><meta http-equiv="Content-Type" content=" ...

  10. openstack安装记录(二)keystone安装

    先决条件 在你配置 OpenStack 身份认证服务前,你必须创建一个数据库和管理员令牌. 完成下面的步骤以创建数据库: 用数据库连接客户端以 root 用户连接到数据库服务器: $ mysql -u ...