所以我需要使用多线程的cora-data托管对象上下文。
我发现以下实现几乎是我所需要的。
我有2个问题:


我应该在哪里释放分配的MOC?我不想遍历应用程序中的每个函数线程并调用一个函数来释放MOC。
我宁愿编写该函数,并以某种方式使之生效,以便每个线程在退出之前都调用它。那可能吗 ?
以下实现足以实现核心数据并发吗?

-(void) StoreManagedObjectContextForCurrentThread:(NSManagedObjectContext*) context
{
    [[[NSThread currentThread] threadDictionary] setObject: context forKey: AQPerThreadManagedObjectContext];
}


-(NSManagedObjectContext *) myManagedObjectContext {


    NSManagedObjectContext * result = [[[NSThread currentThread] threadDictionary] objectForKey: AQPerThreadManagedObjectContext];
    if ( result != nil )
        return result;

    NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator];
    if (coordinator!=nil)
    {
        NSManagedObjectContext * moc = [[NSManagedObjectContext alloc] init];
        [moc setMergePolicy: NSMergeByPropertyObjectTrumpMergePolicy];
        [moc setPersistentStoreCoordinator: coordinator];
        [self StoreManagedObjectContextForCurrentThread:moc];
        [moc release];      // now owned by the thread dictionary
        return moc;
    }

    return nil;
}

最佳答案

在您提供的实现中,您没有办法在线程消失之前释放托管对象上下文,因为它的生存期是由线程字典决定的,并且该对象的生存期是由Foundation处理的,而不是由您处理的。

如果要管理对象的生存期,则需要管理它们的存储。这意味着不再使用-threadDictionary。一种选择是将您的后台工作实现为NSOperation子类,并在操作的整个生命周期内保持托管对象的上下文不变,但这可能与您当前拥有的内容有很大的不同。

关于iphone - 核心数据并发-NSManagedObjectContext,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4525402/

10-10 08:04