【发布时间】:2011-09-14 01:11:38
【问题描述】:
我想决定是使用 XIB 更好,还是完全使用代码来设计我的视图。
到目前为止,我已经了解到,当您在界面构建器上设计视图时,它们是预先构建的,因此即使它们使用更多内存,用户也会觉得一切都更快。
人们说使用代码做任何事情都比较难,但我发现它同样简单,所以我想知道是否有人在使用 nib 时体验到了真正的速度提升。
您有什么经验、建议等?
谢谢!
【问题讨论】:
我想决定是使用 XIB 更好,还是完全使用代码来设计我的视图。
到目前为止,我已经了解到,当您在界面构建器上设计视图时,它们是预先构建的,因此即使它们使用更多内存,用户也会觉得一切都更快。
人们说使用代码做任何事情都比较难,但我发现它同样简单,所以我想知道是否有人在使用 nib 时体验到了真正的速度提升。
您有什么经验、建议等?
谢谢!
【问题讨论】:
您应该能够同时做到这两点——有时以编程方式构建视图会更好/更容易,而有时使用 .xib 会更好/更容易。即使您只以一种方式做事,您也会遇到执行另一种方式的代码,您需要能够处理这种情况。
如果您不知道如何使用 IB,那么在代码中构建视图肯定会更容易。这就是为什么你应该学习使用 IB。一旦您了解了 IB,就可以更快地将您的应用程序可能需要的大多数基于视图的 UI 组合在一起。 IB 可以帮助您排列事物、居中对象、对齐基线、将控件连接到它们的目标和操作等。我认为可以肯定地说,每个使用 IB 的人都有效地体验了“使用 IB 时真正的速度提升”笔尖。”
【讨论】:
您应该知道如何同时使用这两种方法。两者之间的性能差异可以忽略不计,不应成为您选择其中之一的原因。
许多刚接触 iOS 开发的人都有这样的误解,即 nib(.xib 文件)不如以编程方式创建 UI,并且如果您使用 IB,您就不是一个优秀的 iOS 开发人员。这种观点是100%错误的。 IB 由 Apple 创建,Apple 的开发人员使用它来创建他们自己的 Mac OS X 和 iOS 应用程序。如果 IB(作为一种工具)足以被世界上一些最优秀的开发人员使用,那么它对我们大多数人来说可能已经足够好了。
在实践中,我发现两者的结合通常符合要求。
在我自己的应用程序中,我发现 .xib 非常适合快速布置视图的基础知识,它们允许您快速迭代,同时让您预览视图的外观。在 .xib 文件中使用自动布局也更容易。
然后,当您需要做更高级的事情时,例如添加精美的动画或移动视图,这就是 IBOutlets 的用途。您放入笔尖的任何内容都可以通过 IBOutlet 引用。这允许您以编程方式使您的视图变得生动。
最后,您应该完全了解 nib (.xib) 自动为您做什么。您应该了解 .xib 的对象解冻时会发生什么。互联网上有很多资源可以更好地理解 .xib 文件。
另外,学习如何以封装的方式使用 .xibs。例如,.xibs 对于原型单元之类的东西非常有用,它们允许您保持代码库的模块化(比故事板更重要)。此外,您将需要更少的视图控制器中的 UI 代码。
最后,我总是说人们应该将 IB/.xibs 视为 jQuery。这将为您节省大量时间,但最好的开发人员仍然知道如何在必要时使用 javascript 完成所有工作。
祝你好运,玩得开心!
TL;DR 版本
【讨论】:
除非有理由不使用,否则我将始终使用 XIB 文件。这使您的视图可以在以后轻松维护。
以编程方式创建视图的一些原因可能是:
可能有更多的原因,但不会太多。
如果您在不需要时以编程方式创建视图,则会使其他开发人员难以弄清楚视图的外观并进行更改。
【讨论】:
如果您以编程方式构建视图,则可以控制元素的加载。例如您可以使用延迟加载,并在更重要的元素之后的几分之一秒内加载辅助按钮、子视图等,从而使 UI 的关键部分更快地出现。您甚至可以为某些元素设置动画。
如果您使用 IB,您会获得有关正确元素间距和定位的指南,但如果您不经常更改设计,则始终可以将坐标从 IB 复制到代码中。
对于简单的 UI 元素,如果您以编程方式创建它们,最终将需要维护更多行代码。
【讨论】:
IB 和 NIB 在优化视图的加载/卸载方面做了很多工作,但它主要是为了最大限度地减少内存使用与用户感知的速度。例如,延迟加载可能会使应用程序 UI 稍微变慢,但它应该会降低内存使用量。这反过来可以使大型应用程序的整体应用程序性能更好,并且非常鼓励,但很难以狭隘的方式定义“性能”。也很难说什么时候应该或不应该使用 IB - 有时你最好在代码中使用它。
IB 争论与否的一个经常被忽视的因素是开发速度,尤其是在您有多个开发人员的情况下。在更大的团队/项目中,您可能会有一些更专注于应用程序的基础架构、业务逻辑等的开发人员,以及一些更专注于 UI 的开发人员。在这种情况下,使用 IB 将使他们更容易独立工作,这应该会提高整体开发效率。
我将 IB 视为 iOS 开发开发平台的核心部分。这不是在所有情况下都是正确的解决方案,但不知道如何使用 IB 将是一个真正的限制因素。
【讨论】: