iOS 开发中的争议(二)

2019-05-10  本文已影响0人  高思阳

打算分享一些有争议的话题,并且表达一下我的看法。这是该系列的第二篇。

在本文中,我想讨论的是:对于 UI 界面的编写工作,到底应该用 xib/storyboard 完成,还是用手写代码来完成?

本着 “使用过才有发言权” 原则,我介绍一下我的经历:

xib 使用调研情况

除了我本人的经历外,我也调研了一下我手机中装的所有的 App 的开发情况,我写了一个脚本,分析了我手机中一共 100 多个 App 包含的 xib 文件的个数。通常情况下一个 App 如果完全通过 xib/storyboard 来完成的话,那么编写包含的 xib 个数不应该少于 10 个(注:storyboard 在打包时会被拆解成多个它包含的 xib 文件)。

这个调研的最终结果,以及我分析用的脚本源码在 这里。我挑了一些比较有名的应用列在下面。(我另外也列出了它们包含的 js 的文件数量,这个可以反应出该应用对基于 UIWebView 的 Hybrid 编程的使用情况,不过与本次讨论主题无关。)

软件名字 nib 文件数 js 文件数
Mailbox 2.3.3.ipa 0 0
Twitter 6.0.1.ipa 0 0
objcio 1.0.3.ipa 0 0
播客 2.0.ipa 0 0
知乎日报 2.5.ipa 1 2
百度视频 6.2.2.ipa 1 3
高德导航 9.2.ipa 1 0
优酷 4.3.ipa 2 3
网易云音乐 2.3.1.ipa 2 0
滴滴打车 3.6.2.ipa 3 0
网易新闻 416.ipa 4 1
QQ 5.4.ipa 9 2
猿题库 4.1.0.ipa 9 0
京东 .ipa 10 0
搜狐视频 4.6.3.ipa 10 0
快的打车 3.7.ipa 11 0
小猿搜题 1.4.0.ipa 12 0
WeChat 6.1.1.ipa 13 20
Evernote 7.6.5.ipa 23 25
有道云笔记 4.3.1.ipa 40 11
来往 4.3.2.ipa 48 0
百度地图 7.6.1.ipa 76 227
易到用车 6.2.2.ipa 106 0
网易有道词典 5.2.2.ipa 114 9
美图秀秀 3.5.0.ipa 155 3
支付宝钱包 8.5.3.ipa 158 7
手机淘宝 5.2.4.ipa 188 0
易信 1.4.8.ipa 292 12
大众点评 7.0.2.ipa 1783 5
iMovie 211.ipa 4323 1

以上这个表格说明了即使是比较著名的 App,在使用 xib/storyboard 上,也有很大的差异。举几个例子:

另外,像 Mailbox、播客 (Podcast)、Twitter、objcio 这些 App 中 xib 的数量为 0,说明其完全是用手写代码来完成 UI 界面编写的。

当然,也有一些能看出来几乎是由 xib 构成的应用,例如大众点评、美图秀秀、网易有道词典。而苹果的 iMovie 使用了 4000 多个 xib,真让人不敢相信。我后来仔细看了一下,原来是因为 iMovie 做了国际化,每种语言大概有 120 个 xib,因为支持了将近 40 个语言,所以 xib 数量变成了 4000 多个。大众点评的每个 xib 也被切分成了 4 个,具体用处我还没研究,如下是一个示例:

./Payload/DPScope.app/WEDHotelShopInfoMainModule.nib

./Payload/DPScope.app/WEDHotelShopInfoMainModule.nib/objects-8.0+.nib

./Payload/DPScope.app/WEDHotelShopInfoMainModule.nib/objects.nib

./Payload/DPScope.app/WEDHotelShopInfoMainModule.nib/runtime.nib

讨论

就上面的调研我们就可以看出,其实大家对于是否应该使用 xib 做界面是有争议的。在实际案例中:

那么我就从我的角度把用与不用 xib 的优缺点表达一下。

使用 xib 和 storyboard 的优点

使用 xib 和 storyboard 的缺点

关于手写 UI 界面的一些挑战

所以我更喜欢用代码编写 UI 界面,加上现在移动开发对于 App 要求的需求越来越强烈,很多复杂的交互效果需要在代码中编写,这种情况下 xib 能提供的帮助越来越有限。

但是 xib 提供的 “所见即所得” 这种优势还是巨大的,如果我们是手写界面,那么调试起来是非常痛苦的。在这一里,我给大家推荐购买 Reveal 这个界面调试工具,Reveal 可以在 App 运行时动态地修改界面元素的参数,这样我们就可以一次性在代码中把界面元素的字体、颜色、位置这些参数在 Reveal 调试好,避免多次重启运行来调试界面。我在我的 《iOS 开发进阶》 书里,也花了一整章来介绍 Reveal 的使用。如下是书中的一个 Reveal 运行时截图:

image

总结

其实,你完全不需要做一个 “艰难的决定”,你可以像 QQ 和微信那样,根据具体情况来选择性的使用 xib 和 storyboard。这里有我的一些建议:

对于很多新手来说,他们接触到的都是使用 Interface Builder 来构造界面。希望本文让大家了解到 xib 和 storyboard 在开发中的争议,手写界面并不是一个小众的行为并且有很多好处,希望每一个人都能掌握它,并且在需要的时候根据具体情况来决定是否采用。

愿大家玩得开心~

转载:http://blog.devtang.com/2015/03/22/ios-dev-controversy-2/

上一篇 下一篇

猜你喜欢

热点阅读