初始化后台线程中的核心数据堆栈是一个很好的设计选择?

问题描述:

嗨,我想要优化我的iphone应用程序的启动时间(即使应用程序打开后尽快显示第一个视图),我想要优化我的iphone应用程序的启动时间。我想要优化的部分是应用程序委托中的核心数据堆栈(托管对象上下文,持久存储协调器等)的初始化。我想到了两种方法来解决这个问题,并想知道你对这些解决方案(或其他你可能有的)有什么想法(利弊)?初始化后台线程中的核心数据堆栈是一个很好的设计选择?

注:在后台

初始化核心数据堆栈:核心数据堆栈在应用程序委托在Where to place the "Core Data Stack" in a Cocoa/Cocoa Touch application

解决方案1(我的首选之一)给出的理由初始化线程从应用程序委托。这将允许应用程序初始化更快,窗口/视图更快显示。

解决方案2:

懒惰实例化核心数据堆栈时的视图控制器要求接入到核心数据堆栈。然而,我喜欢这个想法,核心数据栈应该在应用程序委托中初始化,然后在需要它的每个视图控制器中传递。

注意:此解决方案打破了在应用程序委托中初始化核心数据堆栈的惯例。

问候,

如果你看一下标准的核心数据利用模板,您将看到堆栈未初始化直到一些视图控制器要求的应用程序委托的managedObjectContext。因此,核心数据堆栈不会初始化,直到需要managedObjectContext加载并开始配置自身的视图之后。

堆栈的实际初始化非常轻巧且快速。在开始主动生成对象图并读写持久性存储之前,核心数据并没有太多的工作。简单地初始化堆栈需要非常少的时间。

有时候,我有类似的担忧,做了一些测试。我发现,初始阶段真正的滞后是第一个视图的加载,而不管它是否使用了核心数据。我无法测量启用核心数据并禁用它之间启动时间的任何差异。

所以,我不会打扰一个非标准的初始化,除非你自己的自定义测试显示它会导致一些性能拖动。

+0

我的看法很简单(即2个按钮)。所以根据你的回答,当视图需要核心数据栈时,我会懒惰地实例化它。感谢TechZen。 – 2011-03-21 16:38:40