coredata学习总结(七)

来源:互联网 发布:nginx 访问图片 404 编辑:程序博客网 时间:2024/06/05 07:21

Integrating Core Data at iOS Startup

ios和os x的程序初始化周期不同。

当os x应用程序执行了一个超长时间的操作并且变得无法响应的时候,操作系统会将鼠标改变来提醒用户。用户可以选择是继续等待应用程序完成海试关闭应用程序。

在ios里,没有这样的概念。如果app在一定时间内么有加载成功,操作系统就会终止掉应用程序。因此,应用程序快速启动是至关重要的。

另一方面,你想让应用程序能尽快的访问core data内部的数据,通常意味着在程序生命周期的第一阶段就要初始化。虽然非典型,core data可能会花费多于平常的时间来完成初始化。

因此,推荐在ios app的启动时,分两步处理来防止app被迫中断。

  1. 最小限度的启动来指明应用程序正在加载。

  2.  一旦core data完成初始化,就完成应用程序ui的加载。

Initializing Core Data in iOS

第一步在application:didFinishLaunchingWithOptions:方法中实现。在这个方法中考虑初始化core data。如果你正在使用storyboard,你可以继续在这个方法中展示launch图片。

作为core data初始化的一部分,在后台队列中将NSPersistentStore添加到NSPersistentStoreCoordinator。这个操作可能会占用比较多的时间,如果在主队列上操作可能会block住用户交互接口而导致应用程序被破终止。

一旦持计划存储被添加到persistent store coordinator,你可以回到主队列并且请求user interface完成和展示。

Separating Core Data from the Application Delegate

先前在ios中,core data栈主要在application delegate中被初始化。但是这样的操作使得代码一塌糊涂。

因此建议core data栈放在自己同等级的controller对象中进行创建。应用程序delegate初始化controller对象并且持有这个controller的引用。

例子如下:

  1. @interface AppDelegate :UIResponder <UIApplicationDelegate>

  2. @property (strong,nonatomic) UIWindow*window;
  3. @property (strong,nonatomic) DataController*dataController;

  4. @end

  5. @implementation AppDelegate

  6. - (BOOL)application:(UIApplication*)applicationdidFinishLaunchingWithOptions:(NSDictionary*)launchOptions
  7. {
  8. [self setDataController:[[DataControlleralloc] init];
  9. // Basic User Interface initialization
  10. return YES;
  11. }

  12. @end
  1. class AppDelegate:UIResponder, UIApplicationDelegate {

  2. var window:UIWindow?
  3. var dataController:DataController!

  4. func application(application:UIApplication, didFinishLaunchingWithOptionslaunchOptions: [NSObject: AnyObject]?) -> Bool {
  5. dataController = DataController()
  6. // Basic User Interface initialization
  7. return true
  8. }

通过独立的controller对象初始化,将core data栈移出了application delegate,但是你仍然允许到application delegate的回调,因此用户接口能知道何时开始请求数据。


0 0