zoukankan      html  css  js  c++  java
  • CoreData多线程

    CoreData中的NSManagedObjectContext在多线程中不安全,如果想要多线程访问CoreData的话,最好的方法是一个线程一个NSManagedObjectContext,每个NSManagedObjectContext对象实例都可以使用同一个 NSPersistentStoreCoordinator实例,这个实例可以很安全的顺序访问永久存储,这是因为 NSManagedObjectContext会在使用NSPersistentStoreCoordinator前上锁。

    初始化一个子线程中的管理上下文:

    NSManagedObjectContext *pravite = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType];
    [pravite setParentContext:self.moc];
    //注册通知
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(mocDidSaveNotification:) name:NSManagedObjectContextDidSaveNotification object:nil];
    [pravite performBlock:^{
          
            //自定开辟子线程
            NSLog(@"%@",[NSThread currentThread]);
            
            //执行操作
    
            
            //同步保存
            NSError *error = nil;
            if ([pravite hasChanges] && ![pravite save:&error]) {
                NSLog(@"%@",error);
                abort();//异常终止一个进程
            }
            
        }];

    子线程管理上下文在多线程中执行任务,管理数据,内容发生变化,触发通知,执行通知方法

    -(void)mocDidSaveNotification:(NSNotification *)notification{
    
        NSManagedObjectContext *saveContext = [notification object];
        //主线程中的上下文不用保存
        if (self.moc == saveContext) {
            return;
        }
        //使用一个持久化指针
        if (self.moc.persistentStoreCoordinator!=saveContext.persistentStoreCoordinator) {
            return;
        }
    
        //在主线程执行合并操作
       dispatch_async(dispatch_get_main_queue(), ^{
           
           [self.moc mergeChangesFromContextDidSaveNotification:notification];
    if([self.moc hasChanges])
    [self.moc save:nil]; }); }

     这样将子线程中的数据合并到主线程的管理上下文中.

  • 相关阅读:
    好的软件架构设计(转)
    利用ManualResetEvent来来控制异步调用的打印的线程的暂停和恢复(转)
    Lucene.Net+盘古分词器(详细介绍)(转)
    如何让 height:100%; 起作用---父级元素必须设定高度
    前端问题汇总
    JS基础_强制类型转换-Number
    CSS实现垂直居中的常用方法
    vue项目上线步骤
    一篇文章全面了解运维监控知识体系
    vue+axios 前端实现登录拦截(路由拦截、http拦截)
  • 原文地址:https://www.cnblogs.com/xiangrikui/p/5269618.html
Copyright © 2011-2022 走看看