ITPub博客

首页 > Linux操作系统 > Linux操作系统 > ios开发 为什么不用Interface builder

ios开发 为什么不用Interface builder

原创 Linux操作系统 作者:beifengwang 时间:2013-10-16 10:02:29 0 删除 编辑


一年前我开始做iOS开发,看的StanfordCS193P老头子推荐新手用Storyboard来做开发,因为它可视化的不太需要了解代码层的东西就能拖出界面,各种配置项可以通过勾选搞定,省去很多代码,相当傻瓜,此外Storyboard也让人对应用程序的活动流程一目了然。对这种拖拽式的编程方式很不习惯:这不是代码出奇迹的节奏啊!

开始做实际的项目。看了几个开源项目的代码后,知道旧时代有个xib格式的文件。这货是InterfacBuilder产物,现在称他为NIB用法和Storyboard差不多,可视化拖拽、配置。Storyboard比较新,业界用的人不多,于是很纠结,底是听老头子的话用新东西,还是随大流试试单独的NIB初生牛犊不怕虎,反正没怎么做过iOS开发,就按课上说的来吧,团队用Storyboard拖UI一个月后,提议弃用InterfacBuilder不用任何NIB包括Storyboard直到现在只要是控制范围内,都没再碰过任何NIB更愿意用代码来生成。

不必InterfacBuilder理由很多,对我来说主要有一下几点:

多人协作
从项目管理的角度来讲NIB就不应该被使用。能保证自己历来不会在合并NIB时出现抵触吗?一个稍有规模,多开发者的项目里,合并NIB简直就是梦魇。特别是多人共用一个Storyboard时,开发者将花费很多时间和精力去解决冲突,而不是去做比这更有意义的事。

当然,如果最终合并结果正确可信,那么很多同学还是可以忍受的然而,合并终究是会出问题的尤其是用Git自动合并。这些问题直到运行时才会出现!倘使测试力度不够,这就是潜在隐患。此外,知道NIB人不可读的也就是说,对它做版本控制几乎没有意义。没法从diff看出来半点名堂。倘使你使用的不是NIB而是一行一行的Objective-C代码,那么结果会好很多。

选择显式而非隐式
喜欢用代码来完成各种东西,这样你打开一个view或者一个viewcontrol就能看到所有东西。否则,看你代码的这位同学还得去找相应的NIB

NIB同样也是滋生bug温床,很多时候你调试了半天才发现,某个bug并不是出在自己的代码里,而是InterfacBuilder某个小角落里自己忘记给某个选项打上√。如果所有的组件都由代码生成,那么在调试时就简单得多,只要专注于和View有关的代码就快好了选择显式地在代码里写view可以让你对view有强大的控制力。从初始化到布局、绘制你都能插手,代码里你清楚地知道某个view各个属性会是多少,而非交由InterfacBuilder来管理,这样虽然看上去代码行数多了但它帮你减少了bug数量,节省了debug时间。

耦合
用InterfacBuilder去创建可复用的view会是一件很蛋疼的事。首先你需要拖拽出各种各样的组件,然后给每个组件设置属性,接着你要把outlet连接到要用到代码块…某一次,忘记连outlet然后你顺序就在runtimcrash看,又弄出了一堆bug对于各种零碎的view更喜欢为他写类,然后在里面实现各种我想要的东西,需要用到这些view时候生成对象就是如果我有什么错误,编译器大哥还能帮我检查。

使用NIB让我提心吊胆,让顺序变得不那么紧凑。很多需要内聚的东西,被分了进来。从实际的开发体验来讲就是东一块,西一块,切来切去我都觉得烦。一旦当你定制的view越来越多,NIB就增多,然后呵呵。

布局
供认自己几乎没在InterfacBuilder用过各种layout包括auto-layout不清楚用NIB做layout否困难。但我知道重写UIViewlayoutSubviews让布局变得很简单。所有子元素的布局只要在这里设置就行了需要重新布局时,调一下setNeedsLayout就行。不用关心什么InterfacBuilder里各种layout概念,不用把布局代码分地方写(降低耦合)只要稍加判断,让同一个view适应iPhon和iPad不是什么难事。给iPad和iPhon分别提供NIB这种事简直不能忍。

外地化
当IB遇到外地化会发生什么呢?屮艸芔茻!只要涉及外地化的NIB都要你去投时间和体力做啊。点鼠标啊,设置啊,纯体力活!如果用代码,字符串用NSLocalizedStr@"LocalizString",@"Comment"然后在资源文件里翻译一下,轻轻松松。

小结
InterfacBuilder初衷可能是希望协助开发者节省写界面的时间和精力。可视化,表示层和数据分离都是很好的思想。但它目前还不让人满意。让多人协作变得困难,诱导拙劣的实践,降低可复用性,让你开发变慢…

如果能不用IB就不用,作为一名顺序员更应该用代码说话。从装逼角度来讲,这样才显得高端大气上档次不是吗?

文章来源

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29212814/viewspace-774438/,如需转载,请注明出处,否则将追究法律责任。

下一篇: MFC详解
请登录后发表评论 登录
全部评论

注册时间:2013-10-15

  • 博文量
    118
  • 访问量
    264675