我在一家新公司开始了iOS开发工作。他们告诉我永远不要使用Interface Builder,因为它难以维护代码并且有一些限制。
在NetBeans中为Java应用程序使用Interface Builder时,我看到很多“糟糕的代码”,但是我没有使用IB看到过这样的情况。此外,我在互联网上看到了很多IB代码,只有很少的代码没有使用它。
所以对于一个没有人是iOS开发初学者的大型项目来说,使用IB是一种不好的做法吗?
我在一家新公司开始了iOS开发工作。他们告诉我永远不要使用Interface Builder,因为它难以维护代码并且有一些限制。
在NetBeans中为Java应用程序使用Interface Builder时,我看到很多“糟糕的代码”,但是我没有使用IB看到过这样的情况。此外,我在互联网上看到了很多IB代码,只有很少的代码没有使用它。
所以对于一个没有人是iOS开发初学者的大型项目来说,使用IB是一种不好的做法吗?
(首先声明,我强烈反对使用Interface Builder,原因有很多,我将在下文中解释)
他们教我永远不要使用Interface Builder,说它难以维护代码并且有一些限制。
这只是部分正确的。我不喜欢Interface Builder和Xcode的主要原因是,许多初学者程序员认为这是开发iOS/OS X应用程序的唯一方法。他们从未听说过gcc
和clang
,不知道编译器和链接器错误消息的含义,无法使用make
,也不知道Objective-C语言、Cocoa(Touch)API、IDE和编译器之间的区别。
最终,他们开始使用Interface Builder和Xcode,了解其中所有古怪的、有时奇怪/不合逻辑的功能(以及错误),但当他们需要开发一些非常规的东西时,他们甚至没有意识到有一种方法可以通过编程方式创建视图和视图控制器(是的,我在StackOverflow上看到过这个问题)。
因此,当被滥用(或者说是过早使用)时,Interface Builder和所有“方便”的功能会导致程序员学习不良概念并错过一些重要的实践和经验。
然而,如果你是一位资深开发人员,拥有所有必要的技能,并且你觉得自己可以仅使用简单的文本编辑器和Makefile从头编写整个应用程序,那么你完全可以使用IB,甚至鼓励你这样做,如果你觉得这比敲代码更舒适的话。
因此,总结一下:
使用界面构建器真的是一个不好的实践吗?
不是。滥用它并且不努力学习UI编程方法才是不好的实践。
附言:我在iOS开发方面有相当多的经验,但我仍然觉得Interface Builder非常不方便和不一致。我通常对所有东西都使用代码。但这似乎是我的个人喜好。然而,其中一个优点是,如果一个人通过代码创建所有内容,那么另一个没有访问这些苹果特定工具的程序员也将能够为项目做出贡献。这是“难以维护”的部分成立的一个点...
例如,直到我没有足够的钱买Mac之前,我使用Linux开发iOS应用程序(是的,这确实是可能的)。我无法使用IB和Xcode,但我已经完成了大量的应用程序和调整(当然是针对越狱的iOS),而且效果非常好。在处理复杂(甚至简单)的图形界面时,IB可以将代码减少到极小的程度——例如,在IB中创建一个按钮只需要几秒钟,而在代码中,这意味着数十行代码,尤其是如果要为按钮添加样式。
使用自动调整大小掩码来支持多个分辨率和设备非常容易——这很重要,因为Apple现在正在推动分辨率无关的应用程序。
更改/微调视图属性只需要点击几下,而不是写几行代码,特别是当涉及到图片时。
然而,我能想到的一个缺点是:
虽然已经有很多讨论,但我仍然想发表我的见解...
在某种程度上,我同意H2CO3的看法,了解底层原理比一味地使用快捷方式更好。这通常是有效的,但是我坚决不同意H2CO3的另一个观点:
大多数人使用某种技术(如C#,Java,HTML,iOS等),是因为他们的公司需要他们使用它,因为其他人实际上会支付您来使用该技术进行工作。而不是因为你真的在半夜醒来,突然想学习C。
如果明天有人要求您创建一个iOS应用程序,而您以前从未开发过iOS应用程序,我真的怀疑您是否能够从零开始创建应用程序,而不使用XIB或Storyboard(我讨厌Storyboard)。
我更喜欢,这只是个人观点,使用 XIB,而不是使用出现在我面前的第一个第三方库。我认为这比手工制作界面更为合理。我更喜欢理解代码,并自己做,而不是使用库帮我下载/上传东西。
总之,我对询问此事的人的建议是:
试着理解为什么要这样做。最重要的是,在每个新项目中尝试成为更好的程序员。如果有新的东西出现(新的iOS版本),花一两天去看看有什么新的,以及你可以使用什么。 XIB 用起来很好,但是花些时间手动创建 UIView's
,这样你就可以看到它们给你带来的所有灵活性。首先要远离 Storyboards(^^)
顺便说一句:一位资深开发人员不仅仅是一个比你“功夫更好”的人..它远不止于此。