【发布时间】:2010-11-03 03:55:13
【问题描述】:
在使用 Interface Builder 设计视图时是否有任何性能、开发缺点或优点?
【问题讨论】:
标签: iphone uiview uiviewcontroller
在使用 Interface Builder 设计视图时是否有任何性能、开发缺点或优点?
【问题讨论】:
标签: iphone uiview uiviewcontroller
为什么没有人提到翻译。我们有一个在 11 个语言环境中的项目 - 这将提供多个 nib*(#locales) - 这是不可接受的(对于 10 个 UI 的项目,超过 100 个 nib)。
【讨论】:
切勿使用该工具查看 NIB 的代码生成。但是请看 Apple 的 Note。
注意:虽然您可以在不使用 nib 文件的情况下创建 Objective-C 应用程序,但这样做非常罕见且不推荐。根据您的应用程序,避免使用 nib 文件可能涉及覆盖大量框架行为以实现与使用 nib 文件相同的结果。
【讨论】:
就我自己而言,当我尝试学习如何为 iPhone 进行开发时,我发现界面构建器非常迟钝。您应该使用的工作流程对我来说仍然没有多大意义。对于挑剔的界面布局,界面构建器比手动编码更快。
在您的 UIViewControllers 中以编程方式生成 GUI 的缺点是您模糊了 MVC 模式中视图和控制器之间的区别。如果您可以将 GUI 生成保留到 loadView 方法,您仍然可以在生成信息的代码和显示信息的代码之间保持良好的界限。
简而言之:我更喜欢通过覆盖 UIViewController 子类中的 loadView 来生成 GUI。
【讨论】:
您经常想使用 Interface Builder;您希望通过编程接口执行此操作的原因有几个:
尽管如此,编程接口有时比使用 Interface Builder 更有利的主要原因是用于需要多次创建的接口元素 - 例如,创建 n UIImageViews - 基于一个不能在 Interface Builder 中复制。编程接口允许这种灵活性,并且在这种情况下通常更有效。
请注意,NIB/XIB 也会占用内存,如果所有接口都放在主 NIB 文件中,它不仅会增加应用程序的内存使用量(对于可能不会立即需要的资源),而且它会增加加载时间。话虽这么说,但是这个问题的正常解决方法不是使用编程接口,而是将不同组的接口元素放在不同的 NIB 文件中,将立即需要的接口放在主 NIB 文件中,该文件在应用程序启动时加载,以及在需要时加载的其他 NIB 文件中的其他界面元素组。
简而言之,一般的方法是使用 Interface Builder,除非您需要创建数量可变且在 Interface Builder 中无法轻松处理的元素。
【讨论】:
一个缺点是很容易错过连接插座或操作,并且对此进行故障排除可能会很痛苦。两个积极的方面是 UI 元素的定位、对齐和锚定要容易得多,而且当手机旋转时元素会自行重绘(这是一个动画过程,否则您需要使用编程元素自行处理)。
【讨论】:
就我目前所见,使用 XIB 生成视图非常容易。但由于我已经很久没有在 iPhone 上进行开发了,我只能将您引向这篇文章,该文章展示了一个示例 XIB 转换为 Objective-C 代码。
http://arstechnica.com/apple/guides/2009/04/iphone-dev-convert-xib-files-to-objective-c.ars
界面生成器随时可用! :)
我确信直接对视图进行编码不会显着提高性能。
【讨论】: