使用XIBs并以编程方式进行视图的优点和缺点

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

到目前为止,我已经读过,当你在界面构build器上devise你的视图时,他们是预先构build的,所以即使他们使用更多的内存,用户也感觉一切都更快。

人们说使用代码做所有事情都比较困难,但是我觉得这很容易,所以我想知道是否有人在使用笔尖时经历了一些真正的速度增益。

你有什么经验,build议等?

谢谢!

您应该可以同时执行这两个操作 – 有时候以编程方式构build视图会更好/更容易,而使用.xib的时间会更好/更容易。 即使你只是以某种方式做事,你也会遇到代码,而这又是另一回事,你需要能够处理这个问题。

如果您不知道如何使用IB,那么在代码中构build您的视图肯定更容易。 这就是为什么你应该学习使用IB。 一旦理解了IB,将应用程序可能需要的大部分基于视图的UI放在一起的方式会更快。 IB可以帮助你排列事物,居中对象,调整基线,将控制连接到他们的目标和行动等等。我认为可以肯定地说, 每个使用IB的人都可以有效地体验到“使用笔尖时真正的速度增益”。

你应该知道如何使用两者。 两者之间的performance差异可以忽略不计,不应该成为你select其中一个的原因。

很多刚开始iOS开发的人都有一个误解,即nibs​​(.xib文件)不如程序化地创build用户界面,如果使用IB,那么你不是一个好的iOS开发人员。 这个观点是100%错误的。 IB由Apple创build,供Apple开发人员使用,创build自己的Mac OS X和iOS应用程序。 如果IB(作为一种工具)足以被世界上一些最好的开发者使用,那么对于我们大多数人来说,这可能已经足够了。

在实践中,我发现两者的结合通常符合法案。

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

那么当你需要做更高级的事情,比如添加花哨的animation或者移动视图时,IBOutlets就是这样做的。 任何你放入笔尖的东西都可以通过一个IBOutlet来引用。 这样可以让你以编程方式让你的视图变得生动起来。

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

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

最后,我总是说人们应该像jQuery一样思考IB / .xibs。 这将节省你很多时间,但最好的开发人员仍然知道如何做JavaScript的一切,如果他们必须。

祝好运并玩得开心点!

TL; DR版本

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

除非有原因,我会一直使用XIB文件。 这可以让您的观点在将来保持轻松。

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

  • 控制需要resize,重新定位或以其他方式改变
  • 控件需要dynamic添加或删除

可能有更多的原因,但不是太多。

如果您在没有需要的情况下以编程方式创build视图,则让其他开发人员尝试弄清楚视图的外观和更改方式会更困难。

如果以编程方式构build视图,则可以控制元素的加载。 例如,您可以使用延迟加载,并在更重要的元素之后几分之一秒加载次级button,子视图等,从而允许UI的关键部分更快地出现。 你甚至可以将一些元素animation化。

如果您使用IB,您将得到有关正确元素间距和位置的指南,但是如果您不经常更改devise,则始终可以将IB中的坐标复制到代码中。

对于简单的用户界面元素,如果以编程方式创build它们,最终会得到更多的代码行。

IB和NIB在优化视图的加载/卸载方面做了很多工作,但它主要是为了最大限度地减less内存使用量和用户感知的速度。 例如,如果有任何延迟加载,可能会使应用程序界面稍微慢一些,但应该使内存使用率更低。 这反过来又可以使大型应用程序的整体应用程序性能更好,这是非常鼓舞人心的,但很难用狭义的方式来定义“性能”。 当你应该或不应该使用IB时,也很难说 – 有些时候你会更好地使用代码。

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

我认为IB是iOS开发平台的核心部分。 这不是每种情况下的正确解决scheme,但不知道如何使用IB将是一个真正的限制因素。