很清楚,这就是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. SD/MMC卡初始化及读写流程

    二.MMC/SD卡的模型和工作原理 PIN脚.SD卡总线.SD卡结构.SD卡寄存器.上电过程 SD卡寄存器:  OCR:操作电压寄存器: 只读,32位 第31位: 表示卡上电的状态位   CID: 卡 ...

  2. C# DateTime类,TimeSpan类

    DateTime类是.Net中用于处理时间类型数据的. 一.字段 MaxValue 表示 DateTime 的最大可能值.此字段为只读. MinValue     表示 DateTime 的最小可能值 ...

  3. 杀死MySQL的连接

    命令  kill 执行线程号 C# 执行杀死指定的连接 1  强制Kill掉 internal protected void KillConnection(MySqlConnection c) { i ...

  4. Linux下GDB调试C/C++

    首先先编译程序并生成调试符号: gcc -g -c main.cpp gcc -o exefile main.o 以上的exefile为可执行程序的文件名 然后: gdb exefile 可以开始gd ...

  5. Google API v3 设置Icon问题处理

    1.查看API实现 //虽然比较符合API实现的思想但这个没法; //会产生Uncaught TypeError: undefined is not a function //google API n ...

  6. UESTC_Infected Land 2015 UESTC Training for Search Algorithm & String<Problem G>

    G - Infected Land Time Limit: 6000/3000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others ...

  7. Extjs实现进度条

    做Extjs开发中,往往后台程序可能要执行一段时间才能得到返回结果,加入进度条可以提高客户体验度,以下为两种便捷的方式: 1.提交数据前用Ext.Msg.wait('提示','正在处理数据,请稍候') ...

  8. XMind快捷键可以自定义吗

    在使用快捷键的时候,不知你是否有过这样的疑问,为什么这个操作的快捷键一定要是这个呢,我为什么不能换成其他的按键呢.其实这些在XMind思维导图中都是可以更改的,用户可以根据自己的操作习惯来定义快捷键命 ...

  9. SqlServer 数据库日志无法收缩处理过程

    今天按常用方法收缩一个测试用的数据库日志,发现没法收缩! dbcc sqlperf(logspace)     USE [dbname] GO ALTER DATABASE [dbname] SET  ...

  10. SDK调试出错小技巧=。=

    学习Unity小伙伴完全不懂Android编程抓错误是很困难的..... 1. 使用UnityPlayer.UnitySendMessage(); 发送到Unity使用OnGUI显示错误 2. 直接在 ...