4

我有大量在应用程序委托 applicationDidFinishLaunching 中创建并添加到 NSMutableArray 的 UIView。用户使用页面控件和滚动视图浏览这些视图。我在 IB 中创建了 UIView 及其子组件。它们连接到控制器。在 iPhone 上创建 170 个视图大约需要 30 秒。最终,我的浏览量将超过 1000 次。除了速度慢之外,它还会因为内存使用而杀死应用程序。在没有视图的情况下以编程方式创建所有内容的速度和内存效率有多高?6000 个事实类型的应用程序中的一些是如何做到的?

有没有更好的方法而不是一次创建所有内容?用户可以访问插槽#400 中的视图并从那里开始滚动。任何建议表示赞赏。

4

2 回答 2

8

UIViewControllers 是懒惰的。它们仅在请求时加载,并在内存紧张时自动卸载(并且很容易通过调用手动卸载它们self.view=nil)。

这里的“加载”意味着“读取 NIB”或“以编程方式构建”。ViewControllers 并不真正关心。以编程方式构建可能会快一点,因为您不必敲击磁盘,但这很少是瓶颈,因为您一次只显示一个视图控制器。

至于走哪条路,它更多的是风格而不是性能(UITableViewCells 除外,在大多数情况下您需要以编程方式构建它是有原因的)。

从学习View Controller Programming Guide开始。它将向您展示 iPhone 打算如何执行此操作。

对于 eJames 关于 NIB 是 XML 文件的评论,这可能有点误导。NIB 是通过编译 XML 的 XIB 文件生成的二进制文件。在假设NIB加载时间实际上是一个问题之前,我实际上会在手机上进行分析。就像我天生倾向于程序化布局一样,我在实践中发现 NIB 在实践中极大地简化了许多 UI 问题,并且我总是在大型项目中使用它们。

于 2009-05-26T17:53:48.387 回答
2

在不了解您的具体问题的情况下很难提出答案,但我敢说,如果您希望显示 1000 种不同的东西,那么在 IB 中创建 1000 个单独的视图不是可行的方法。

如果你的页面共享一个共同的布局,你可以使用 UITableView 来显示每个页面的内容,并且只将每个页面的数据存储在你的NSMutableArray.

UITableView可以在此处找到有关如何使用的出色教程。

如果他们不共享一个共同的布局,那么以编程方式布局将是可行的方法。这不应该比使用 IB 更占用内存或处理器,实际上它可能会更快,因为它消除了读取和解析 XML 文件的需要(实际上是 .NIB 文件)。

于 2009-05-26T17:45:32.710 回答