使用XIB和编程方式创建视图的优缺点

4

我想决定是使用XIB还是完全使用代码设计我的视图。

到目前为止,我已经了解到,在接口构建器上设计视图时,它们是预先构建的,因此即使它们使用更多的内存,用户也会感觉到一切都更快。

人们说完全使用代码比较困难,但我发现这样做同样容易,所以我想知道是否有人在使用nib时体验到了一些真正的速度提升。

您有什么经验、建议等等吗?

谢谢!

5个回答

3
您应该能够两种方式都做到 - 有时以编程方式构建视图更好/更容易,有时使用 .xib 更好/更容易。即使您只能以一种方式实现所有事情,也会遇到以另一种方式实现的代码,并且需要能够处理它们。
如果您不知道如何使用 IB,则在代码中构建视图肯定更容易。这就是为什么您应该学习使用 IB 的原因。一旦您理解了 IB,将组合大部分基于视图的 UI 变得迅速得多,IB 可以帮助您对齐对象、居中对象、连接控件到它们的目标和动作等等。我认为可以说,每个有效使用 IB 的人都会在使用 nibs 时体验到“真正的速度提升”。

2
你应该知道如何同时使用它们两者。两者之间的性能差异微不足道,并不应该成为你选择其中一种的原因。
很多新手iOS开发者错误地认为nib(.xib文件)比程序化创建UI更低效,如果你使用IB就不是一个好的iOS开发者。这个观点是完全错误的。IB是由苹果公司创建的,被苹果公司的开发者用来创建他们自己的MacOS和iOS应用程序。如果IB(作为工具)足够好,被世界上最好的开发者之一使用,那么它对我们大多数人来说也足够好。
实际上,我发现两者的结合通常可以胜任。
在我的应用程序中,我发现.xib非常适合快速布局您的视图,并且允许您快速迭代,同时还可以预览您的视图的外观。在.xib文件中使用自动布局要容易得多。
当您需要做更高级的事情,例如添加花哨的动画或移动视图时,IBOutlets就是为此服务的。您在nib中放置的任何内容都可以通过IBOutlet引用。这使您可以编写代码使视图活起来。
最后,您应该充分理解nib(.xib)自动完成了什么。您应该了解当.xib的对象被解冻时发生了什么。有许多互联网资源可以更好地理解.xib文件。
此外,学习如何以封装的方式使用.xibs。例如,.xibs对于原型单元格等非常有用,它们允许您保持代码库模块化(比故事板更好)。此外,您将需要更少的UI代码在您的视图控制器中。
最后,我总是说人们应该将IB / .xibs视为jQuery。它会为您节省大量时间,但最好的开发人员仍然知道必要情况下如何使用JavaScript完成所有任务。
祝你好运并玩得开心!
TL;DR版本
- 性能不是使用.xibs时考虑的因素。 - 使用.xibs因为它们给您提供了所创建视图的预览,并且允许您快速迭代。 - 在实践中,大多数应用程序将同时使用程序化和.xibs。您可以通过编程来添加动画或移动视图,但.xibs将是起点。 - 充分理解.xib的对象被解冻时发生的所有内容。 - 您将变得更加高效,但一定要充分了解背后发生的事情。

1

除非有理由不使用XIB文件,否则我总是会使用它。这样可以轻松地在未来维护您的视图。

创建视图程序化的一些原因可能包括:

  • 控件需要根据其他内容调整大小、重新定位或以其他方式进行更改
  • 需要动态添加或删除控件

可能还有其他原因,但并不太多。

如果没有必要而程序化地创建视图,则会使其他开发人员难以弄清楚视图的外观和更改它。


3
我不同意默认使用XIB。iPhone版本的IB缺少太多功能,如按钮和背景的可拉伸图片、数字格式化器和自定义小部件等等...在真实的应用程序中,我几乎每个元素都要创建一个IBOutlet以便通过代码进行更改,这非常难以维护,并且很容易断开其中一个连接。 - Gabe
我非常不喜欢在一个项目中发现所有的布局都是用XIB完成的。对于许多布局任务来说,代码更容易阅读,而不必到处跳转去找出链接在哪里...通常全屏的TableViews、ScrollViews等都会嵌入XIB文件中,并与outlets链接起来,而这些可以通过一行代码实现。良好编码的布局也比自动调整大小的掩码更适应屏幕尺寸。XIB非常适合任意布置组件,但在我看来被过度使用了。 - Chris Hatton

0
如果您以编程方式构建视图,则可以控制元素的加载。例如,您可以使用惰性加载,并在更重要的元素之后不到一秒钟地加载次要按钮、子视图等,从而使UI的关键部分更快地出现。您甚至可以将某些元素动画化为位置。
如果您使用IB,则会获得有关正确元素间距和定位的指南,但如果您不经常更改设计,则始终可以将IB中的坐标复制到代码中。
对于简单的UI元素,如果您以编程方式创建它们,您最终将需要维护更多的代码行。

0

IB和NIB在加载/卸载视图方面做了很多优化工作,但它主要是以最小化内存使用和用户感知速度为导向。例如,懒加载可能会使应用程序UI略微变慢,但它应该可以降低内存使用。这反过来可能会使大型应用程序的整体性能更好,并且非常受推荐,但很难以狭义的方式定义“性能”。同时也难以确定何时应该或不应该使用IB-有时你更应该在代码中完成。

IB或不讨论经常被忽视的一个元素是开发速度,特别是如果你有多个开发人员。在更大的团队/项目中,您可能会有一些开发人员专门从事应用程序基础设施、业务逻辑等方面的工作,还有一些开发人员专门从事UI方面的工作。在这种情况下,使用IB将使他们更容易独立工作,这应该可以提高总体开发效率。

我认为IB是iOS开发平台的核心部分。虽然并非在所有情况下都是正确的解决方案,但不知道如何使用IB将是一个真正的限制因素。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接