【问题标题】:When Should I Use The Interface Builder?我什么时候应该使用界面生成器?
【发布时间】:2014-01-16 00:39:53
【问题描述】:

在我学习 iPhone API 的过程中,我使用的这本书让我可以尽一切可能使用 Interface Builder。我们(有时在这里很孤独)也在编写代码,但我真的觉得我对 Interface Builder 有了很好的了解。

我知道 Interface Builder 与其他 GUI Builder 不同,因为它使用序列化对象并且不编写代码。这应该是件好事。那么...在日常工作中,它是首选工具,还是我应该尝试克服对 Interface Builder 的依赖?

另外:如果你建议“这取决于你在做什么”,它取决于什么?我应该如何决定是否使用 Interface Builder?

注意:这个问题的主观和争论版本的标题是,Interface Builder: Serious Tool or Just For Kids?但我决定不这样做,因为我想避免结束问题。

【问题讨论】:

    标签: cocoa-touch macos interface-builder


    【解决方案1】:

    Interface Builder 确实用于制作应用程序。看看任何基于 Cocoa 的 Mac 应用程序——大多数不是由 Adob​​e 或 Microsoft 开发的——你会发现它充满了 nibs。不使用 Interface Builder 制作 iPhone 应用程序的情况稍微普遍一些(因为最初的 SDK 没有提供 IB),但它仍然是一个非常常用的工具。

    Interface Builder 与大多数其他 GUI 构建器之间的区别在于 Cocoa 和 Interface Builder 是在设计时考虑到彼此的。事实上,如果您搜索Cocoa mailing list archives,您会发现多年来有很多人想知道如何在不使用 Interface Builder 的情况下制作 Cocoa 应用程序。 (答案总是一样的:你可以用代码来做这一切,但你只是在浪费你的时间,让设计一个好的界面变得更加困难。)

    【讨论】:

    • 谢谢,我就是这么想的。至少在充满引用计数的日子里,这是一个积极的消息。
    • 我知道这是一个老问题,也是一个老答案——但我完全同意这个答案。
    • @Moszi,您不妨在这里查看 Chuck 的所有答案。他们始终具有洞察力和信息量。
    【解决方案2】:

    是的,差别很小。不同之处在于 IB 使用了以编程方式生成接口的更多存储和 RAM 内存。这是我的简单示例。 { 我是 OBJ-C 的新手 }

    这里的源代码和二进制应用程序 http://www.mediafire.com/download/9ph1zs1kyag9f1g/TestDifference_IB-Programmatically.zip

    【讨论】:

      【解决方案3】:

      Interface Builder 是一个很棒的工具。尽可能多地使用它。
      当你不能只使用 Interface Builder 做某事时,是时候编写混合 IBOutlets 和代码的代码了,或者只用代码来做。

      【讨论】:

        【解决方案4】:

        如果您打算使用标准 UIKit 用户界面元素,界面构建器非常有用。使用 Interface Builder 设计基于 UIKit 的用户界面也有助于您遵守Apple iPhone Human Interface Guidelines

        只有少数情况下您不想使用 Interface Builder,最明显的一种是提供自己独特外观和感觉的游戏。

        我认为您无需担心构建“对 Interface Builder 的依赖”。它是一个工具,就像其他任何工具一样。使用它不是依赖,它只是我们完成工作的方式。

        【讨论】:

        • 感谢 Brian,其他平台上的其他 GUI 工具并非如此。由构建器创建的代码通常看起来很糟糕并且难以维护。所以我认为它不像任何其他工具。它似乎很适合不使用它,或者有时使用它。
        【解决方案5】:

        Interface Builder 不生成代码,它只是创建现有类的对象图。如果您查看 nib 文件,您可以看到这一点。它只是一个规则列表,用于创建哪些对象以及在它们之间设置哪些关系。笔尖中没有代码,而且各种loadFromNib 方法中的代码非常少。

        Objective-c 中的运行时耦合使这一切成为可能。我没有任何其他语言可以真正做到这一点。

        【讨论】:

        • 也许我错了,但我认为即使是 Java 也有运行时耦合(通过反射和动态调用)......虽然没有接口构建器,但理论上在许多语言中都是可能的。没有?
        • Java 的部分灵感来自于 Objective-C,所以它接近但 IIRC,Java 没有对应的“id”引用,所以它在这方面不如 Objective-C 灵活。每种语言都有比其他语言做得更好的东西,而运行时耦合是 Objective-C 的强项。
        猜你喜欢
        • 2011-02-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-09-07
        • 2012-09-22
        • 1970-01-01
        • 2012-12-23
        • 2021-07-13
        相关资源
        最近更新 更多