使用XIB并以编程方式执行视图的优缺点

时间:2011-06-13 16:03:06

标签: iphone ios ipad xib nib

我想决定是否更好地使用XIB或使用代码完全设计我的视图。

到目前为止,我已经读过,当您在界面构建器上设计视图时,它们是预构建的,因此即使它们使用更多内存,用户也会觉得一切都更快。

人们说使用代码做一切都比较困难,但我发现它同样容易,所以我想知道是否有人在使用笔尖时经历了一些真正的速度提升。

您的经历,建议等是什么?

谢谢!

5 个答案:

答案 0 :(得分:3)

您应该能够同时执行这两项操作 - 有时以编程方式构建视图更好/更容易,并且使用.xib时更好/更容易。即使你只是以某种方式做事,你也会遇到另外做的代码,你需要能够处理它。

如果您不知道如何使用IB,那么在代码中构建视图肯定更容易。这就是你应该学会使用IB的原因。一旦你理解了IB,就可以更快地将你的应用可能需要的大多数基于视图的UI组合在一起。 IB可以帮助您排队,中心对象,对齐基线,将控件连接到目标和操作等等。我认为可以安全地说使用IB的所有人在使用时有效地体验“真正的速度提升碎粒“。

答案 1 :(得分:2)

你应该知道如何使用它们。两者之间的性能差异可以忽略不计,不应该是您选择其中一种的原因。

许多刚接触iOS开发的人都误以为nib(.xib文件)不如以编程方式创建UI,如果使用IB,那么你就不是一个优秀的iOS开发人员。这种观点是100%错误的。 IB由Apple创建,Apple开发人员使用它来创建自己的Mac OS X和iOS应用程序。如果IB(作为一种工具)足够好,可以被世界上一些最好的开发者使用,那对我们大多数人来说可能已经足够了。

在实践中,我发现两者的组合通常符合要求。

在我自己的应用程序中,我发现.xibs非常适合快速布置视图的基础知识,它们允许您快速迭代,同时让您预览视图的外观。在.xib文件中使用自动布局也更容易。

然后当你需要做更多高级的事情,比如添加花哨的动画或移动视图,这就是IBOutlets的用途。您放入笔尖的任何东西都可以通过IBOutlet引用。这样您就可以通过编程方式使您的视图变得生动。

最后,您应该完全理解nib(.xib)为您自动执行的操作。您应该了解.xib的对象解冻后会发生什么。互联网上有很多资源可以更好地理解.xib文件。

另外,学习如何以封装的方式使用.xibs。例如,.xibs对于像原型单元这样的东西是疯狂有用的,它们允许你保持代码库模块化(比故事板更多)。此外,您将在视图控制器中需要更少的UI代码。

最后,我总是说人们应该将IB / .xibs视为jQuery。这将节省你很多时间,但最好的开发人员仍然知道如果他们必须在javascript中做所有事情。

祝你好运,玩得开心!

TL; DR版

  • 决定使用.xibs时,性能不是考虑因素。
  • 使用.xibs,因为它们可以预览您正在创建的视图,并允许您快速迭代
  • 在实践中,大多数应用都将使用两者的组合。您将以编程方式添加动画或移动视图,但.xibs将是一个起点
  • 完全了解.xib中的对象解冻时会发生什么
  • 你会更有效率,但要确保你完全理解幕后发生的事情。

答案 2 :(得分:1)

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

以编程方式创建视图的一些原因可能是:

  • 需要调整控件的大小, 重新定位或以其他方式改变 取决于其他东西
  • 控制 需要添加或删除 动态

可能有更多原因,但没有太多原因。

如果您在不需要的时候以编程方式创建视图,那么其他开发人员就会更难以弄清楚视图的外观并进行更改。

答案 3 :(得分:0)

如果以编程方式构建视图,则可以控制元素的加载。例如您可以使用延迟加载,并在更重要的元素之后加载辅助按钮,子视图等一小段时间,从而允许UI的关键部分更快地出现。你甚至可以将一些元素动画到位。

如果您使用IB,您可以获得有关正确元素间距和定位的指南,但如果您不经常更改设计,则可以随时将坐标从IB复制到代码中。

对于简单的UI元素,如果以编程方式创建它们,最终将会有更多代码行进行维护。

答案 4 :(得分:0)

IB和NIB在优化视图的加载/卸载方面做了很多工作,但它主要面向最小化内存使用量与用户感知速度。例如,延迟加载,如果有什么可能使应用程序UI稍微慢一点,但它应该使内存使用率更低。这反过来可以使大型应用程序的整体应用程序性能更好,并且非常鼓励,但很难以狭隘的方式定义“性能”。很难说你应该或不应该使用IB - 有时候你会在代码中做得更好。

对IB而言,经常被忽视的一个因素是辩论的发展速度,特别是如果您有多个开发人员。在一个更大的团队/项目中,您可能会有一些开发人员更专注于应用程序的基础架构,业务逻辑等,以及一些专注于UI的开发人员。在这种情况下,使用IB将使他们更容易独立工作,这将使整体开发更有效。

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