【问题标题】:Good reasons why to not use XIB files?为什么不使用 XIB 文件的充分理由?
【发布时间】:2011-02-15 14:05:19
【问题描述】:

我是否有充分的理由不使用具有高度自定义 UI 和大量动画以及超低内存占用需求的 XIB / NIB 文件?

作为初学者,我从 XIB 开始。然后我发现我不能只做他们的所有事情。以我希望的方式定制事物开始变得非常困难。所以最后,我把我所有的 XIB 都扔掉了,并以编程方式完成了所有工作。

所以当有人问我 XIB 好不好时,我一般会说:是的,如果你想制作蹩脚无聊的界面并且不太关心性能,那就去吧。但是还有什么理由不使用 XIB 呢?

出于这个原因,我是唯一一个喜欢以编程方式完成所有事情的 iPhone 开发人员吗?

【问题讨论】:

    标签: iphone nib xib


    【解决方案1】:

    我认为 Interface Builder 是 Mac(以及 iPhone)软件开发的最大资产之一。 GUI 是可视的;为什么使用可视界面创建它们? IB 足够灵活,您可以使用其“通用”组件来布局接口,然后在必要时对它们进行子类化。当然,如果您有一个独特的界面,您将不得不继承一个视图类并执行自定义绘图,但您也可以在 IB 中布置您的界面,然后轻松使用检查器将类切换到您的自定义子类。

    【讨论】:

    • IB 不会向您展示您的自定义事物的外观,因此毫无意义。
    • 当然可以,但是它不能准确地看到您的自定义事物的样子,但仍然能够以视觉方式进行布局,这比完全以编程方式完成要好。如果您以编程方式执行此操作,您将看不到界面中的任何内容根本。 (而且,如果您有一个经常使用的自定义元素,您可以为其创建一个 IB 调色板插件。)
    • IB Palette 看起来很有趣。但是,如果您的视图实际上是透明的并大量使用 -drawRect,甚至动态调整它们的框架,那么您将无法使用 IB。
    【解决方案2】:

    老实说,我认为这是一种便利。如果您愿意用代码编写所有内容,那就去吧。如果你的项目设计得很好,那么创建新窗口等的工作量应该差不多。但我知道很多人对 GUI 世界不太满意,所以 nib/xib 在那里工作得很好。

    老实说,我发现自己经常使用 XIB 作为基础,并使用代码对其进行编辑以获得我想要的特定外观。个人喜好。

    对于这一点上的特定问题,从 xib 加载视图后可能难以配置视图。当您在 IB 和代码之间存在冲突设置时,可能会难以排除故障。

    这里有一个关于列表的问题。使用 xib 对性能有何影响?我认为它们是一个加分项,因为在您需要它们之前它们不会被加载到内存中。也就是说,加载时间更长,这会减慢您的程序速度。想法?

    【讨论】:

    • 如果您担心在编程接口上使用 XIB 的性能,您应该阅读以下内容:cocoawithlove.com/2010/03/… 要点是,是的,在某些特定情况下,接口的编程构造更快,但是在几乎所有情况下,几乎没有性能损失。
    • 我同意这一点。我什至没有费心使用 XIB,因为我在其他语言方面的所有经验都帮助我以编程方式制作东西。当我有空闲时间时,我会学习 Interface Builder 的工作原理,但在那之前我会做我所知道的。
    • 请务必注意,选择哪种编码方式不仅仅是您喜欢什么。在绝大多数情况下,您并不是唯一一个将来要维护代码的人。对于不能像在 Interface Builder (Xcode) 中单击复选框或使用组合框那样快速(或健壮)编码的大量开发人员来说,使用 XIB 是非常可取的。很少有人会遇到同样程度的相反问题(很难知道如何以图形方式做事)。
    • @Nate 成为少数人中的一员:以编程方式做事对我来说更加健壮,我不必花一整天的时间来改变问题,最后看到 some1 只是没有'不要将它连接到正确的 IBOutlet 另外,我发现它有问题有时我想改变一点,这甚至不应该以编程方式发生,我发现自己在谷歌上搜索了几个小时,最后它是 xib 中的一些愚蠢的复选框。 .. 对我来说,以编程方式构建视图是最好的方法,也很容易调试等。有时我做的事情 Xib 做不到。 IMO every1 应该知道这两种方式。
    【解决方案3】:

    我发现关于代码更好的一件事是控件上的事件连接,当您搜索方法(消息)的使用时,如果它们是编码的,您会找到它们,如果它们是在 IB 中设置的,则找不到它们。

    另一方面,在 IB 中在视图上布置对象要容易得多,您可以在其中看到它们的大小和位置。当您在代码中执行此操作时,您必须猜测大小和原点设置,然后运行它并进行调整,然后再次运行它以查看它的外观。

    【讨论】:

      【解决方案4】:

      当您的应用程序具有某种“标准”视图时,请使用 XIB。如果您需要真正的定制,请根据外部内容(XML...)以编程方式进行。

      我开始使用 XIB,现在都是代码,我发现自己用这种方式更舒服。我在使用 XIB 时遇到了真正的问题,现在全部用代码编写接口真的节省了我的时间。

      【讨论】:

        【解决方案5】:

        在连接所有导航内容的启动阶段处理 UIControllers(UITabBarControllers、UINavigationControllers 等)时,我节省了大量时间。

        我只是构建带有 XIB 的 X viewControllers,加入 IB 中所需的东西、标签、图像等。这意味着对于几乎任何类型的应用程序,您都可以在几个小时内完成概念验证。这足以证明花一些时间学习 IB 的来龙去脉是合理的。尤其是在 iPhone 上,您可以拥有大量好的 UI 创意,但当它们从模拟器转移到实际设备时,它们都失败了。

        在我看来,最好的办法是平衡它,如果您发现自己花费大量时间执行“更改帧 3 px -> 编译 -> 啊.. 需要多两个像素 -> 更改 2 px - compile -> ahh .. 1 px" 对于可以在 IB 中完成的事情,您将严重开始浪费时间。

        我从上面开始,但之后我经常将 XIB 扔掉以获取自定义内容。诀窍是不要花费数小时在代码中一遍又一遍地实现自定义内容的版本,而是弄清楚它应该如何并执行一次自定义内容:)

        【讨论】:

          【解决方案6】:

          nib 文件的 XML 内容非常复杂。这使得使用 Git 等版本控制系统审查更改或修复合并冲突变得极其困难。

          Interface Builder 是个好主意,但Bret Victor 在他的演讲“Inventing on Principle”和他的文章“Learnable Programming”中含蓄地挑战 Apple 构建更好的 IDE。

          一个想法,基于 Bret Victor 的原则:如果我可以在 iOS 模拟器应用程序中选择一个“移动工具”,让我在我的应用程序中移动一个按钮,然后在实现中更改框架代码 (.m)文件?这样会好很多。

          【讨论】:

          • Xcode 的每个新版本都会改​​善这种情况。如今,它非常擅长避免冲突,而且 XML 肯定是人类可读的,即使它不是真正的人类可写的。
          猜你喜欢
          • 1970-01-01
          • 2014-06-04
          • 1970-01-01
          • 2012-06-17
          • 1970-01-01
          • 2011-06-08
          • 1970-01-01
          • 2020-02-04
          • 2013-08-16
          相关资源
          最近更新 更多