以编程方式与IB创建视图的效率

时间:2009-05-26 17:22:09

标签: objective-c iphone cocoa-touch uiview uiscrollview

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

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

2 个答案:

答案 0 :(得分:8)

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

“加载”在这里表示“读取NIB”或“以编程方式构建”。 ViewControllers并不在乎。以编程方式构建可以更快一些,因为您不必访问磁盘,但这很少是瓶颈,因为您一次只显示一个视图控制器。

至于哪种方式,它更多的是风格而不是性能(除了UITableViewCells,你需要在大多数情况下以编程方式构建)。

首先研究View Controller Programming Guide。它会告诉你iPhone如何打算你这样做。

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

答案 1 :(得分:2)

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

如果您的网页共享一个公共布局,您可以使用UITableView显示每个网页的内容,并仅为NSMutableArray中的每个网页存储数据

可以找到有关如何使用UITableView的优秀教程here

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