gpt4 book ai didi

iphone - 核心数据并发 - NSManagedObjectContext

转载 作者:行者123 更新时间:2023-12-03 21:09:09 26 4
gpt4 key购买 nike

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

  1. 在哪里释放我分配的 MOC?我不想遍历应用程序中的每个函数线程并调用函数来释放 MOC。我宁愿编写该函数,并以某种方式使其在退出之前被每个线程调用。这可能吗?

  2. 下面的实现足以满足核心数据并发性吗?

    -(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;
    }

最佳答案

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

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

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

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com