【问题标题】:Pros and cons of using XIBs and doing views programmatically使用 XIB 和以编程方式执行视图的优缺点
【发布时间】:2011-09-14 01:11:38
【问题描述】:

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

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

人们说使用代码做任何事情都比较难,但我发现它同样简单,所以我想知道是否有人在使用 nib 时体验到了真正的速度提升。

您有什么经验、建议等?

谢谢!

【问题讨论】:

    标签: iphone ios ipad xib nib


    【解决方案1】:

    您应该能够同时做到这两点——有时以编程方式构建视图会更好/更容易,而有时使用 .xib 会更好/更容易。即使您只以一种方式做事,您也会遇到执行另一种方式的代码,您需要能够处理这种情况。

    如果您不知道如何使用 IB,那么在代码中构建视图肯定会更容易。这就是为什么你应该学习使用 IB。一旦您了解了 IB,就可以更快地将您的应用程序可能需要的大多数基于视图的 UI 组合在一起。 IB 可以帮助您排列事物、居中对象、对齐基线、将控件连接到它们的目标和操作等。我认为可以肯定地说,每个使用 IB 的人都有效地体验了“使用 IB 时真正的速度提升”笔尖。”

    【讨论】:

      【解决方案2】:

      您应该知道如何同时使用这两种方法。两者之间的性能差异可以忽略不计,不应成为您选择其中之一的原因。

      许多刚接触 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 版本

      • 在决定是否使用 .xibs 时,性能不是考虑因素。
      • 使用 .xib,因为它们可以让您预览正在创建的视图,并且可以让您快速迭代
      • 实际上,大多数应用程序会结合使用两者。您将以编程方式添加动画或移动视图,但 .xibs 将是一个起点
      • 充分了解 .xib 中的对象解冻后会发生什么
      • 您的工作效率会更高,但请确保您完全了解幕后发生的事情。

      【讨论】:

        【解决方案3】:

        除非有理由不使用,否则我将始终使用 XIB 文件。这使您的视图可以在以后轻松维护。

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

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

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

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

        【讨论】:

        • 我不同意您应该默认使用 XIB。 iPhone 版本的 IB 缺少太多功能,例如按钮和背景的可拉伸图像、数字格式化程序和自定义小部件......维护起来很糟糕,而且很容易断开其中一个插座连接。
        • 我害怕遇到一个一切都使用 XIB 完成的项目。对于许多布局任务,代码更容易阅读,而无需到处乱跳找出链接的位置...通常全屏 TableViews、ScrollViews 等都将嵌入 XIB 文件并链接到可以在一行代码中实现相同功能的网点。编码良好的布局也比自动调整蒙版更能适应屏幕尺寸。 XIB 非常适合任意布局的组件,但会过度使用 IMO。
        【解决方案4】:

        如果您以编程方式构建视图,则可以控制元素的加载。例如您可以使用延迟加载,并在更重要的元素之后的几分之一秒内加载辅助按钮、子视图等,从而使 UI 的关键部分更快地出现。您甚至可以为某些元素设置动画。

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

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

        【讨论】:

          【解决方案5】:

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

          IB 争论与否的一个经常被忽视的因素是开发速度,尤其是在您有多个开发人员的情况下。在更大的团队/项目中,您可能会有一些更专注于应用程序的基础架构、业务逻辑等的开发人员,以及一些更专注于 UI 的开发人员。在这种情况下,使用 IB 将使他们更容易独立工作,这应该会提高整体开发效率。

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

          【讨论】:

            猜你喜欢
            • 2015-09-12
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-08-25
            • 1970-01-01
            • 2018-12-02
            • 2014-08-24
            相关资源
            最近更新 更多