Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 与IB相比,以编程方式创建视图的效率_Objective C_Iphone_Cocoa Touch_Uiview_Uiscrollview - Fatal编程技术网

Objective c 与IB相比,以编程方式创建视图的效率

Objective c 与IB相比,以编程方式创建视图的效率,objective-c,iphone,cocoa-touch,uiview,uiscrollview,Objective C,Iphone,Cocoa Touch,Uiview,Uiscrollview,我有大量UIView,它们是在app delegate ApplicationIDFinishLaunching中创建的,并添加到NSMutableArray中。用户使用页面控件和滚动视图浏览这些视图。我在IB中创建了UIView及其子组件。它们连接到控制器。在iPhone上创建170个视图大约需要30秒。最终,我将拥有1000多个视图。除了速度慢之外,它还会因为内存使用而导致应用程序死机。在没有视图的情况下以编程方式创建所有内容的速度和内存效率有多高?6000个事实型应用程序中的一些可能是如何

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


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

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

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

您可以找到一本关于如何使用
UITableView
的优秀教程


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

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

“加载”在这里的意思是“读取NIB”或“以编程方式构建”。ViewController并不真正关心。以编程方式构建可以稍微快一点,因为您不必访问磁盘,但这很少是瓶颈,因为您一次只显示一个视图控制器

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

首先,研究这个问题。它将向您展示iPhone打算如何做到这一点


对于eJames关于NIB是XML文件的评论,这可能有点误导。NIB是通过编译XML格式的XIB文件生成的二进制文件。在假设NIB加载时间确实是一个问题之前,我会在手机上进行分析。虽然我天生倾向于编程布局,但我在实践中发现,NIB在实践中大大简化了许多UI问题,对于大型项目,我总是会回到NIB上来。

为什么需要这么多视图?它们都是独一无二的吗?如果没有,为什么不重用它们?它们真的都需要在内存中吗?请查看6000真棒事实应用程序了解原因。谢谢。哇,我不知道这个信息是否正确,但如果是的话。。。信息量很大。