NSMergeByPropertyObjectTrumpMergePolicy与NSMergeByPropertyStoreTrumpMergePolicy

Art*_*sev 7 cocoa-touch core-data objective-c ios

在我的多线程应用程序中,主线程和一个或多个后台线程可以同时访问,获取和更改核心数据存储中的信息.对于每个线程,我正在创建一个新的NSManagedObjectContext.但是,每个实例NSManagedObjectContext使用相同的"NSPersistentStoreCoordinator"实例(存储在单例中的其他位置).

我的问题是关于每个实例的合并政策NSManagedObjectContext.如果我为后台线程(NSMergeByPropertyStoreTrumpMergePolicy)和NSMergeByPropertyObjectTrumpMergePolicy主线程的另一个策略()设置一个合并策略,是否有内在的好处?

在我的NSMangagedObjectContext吸气器中,我有以下条件:

    if ( [NSThread isMainThread] ) {

        [_context setMergePolicy:NSMergeByPropertyObjectTrumpMergePolicy];

    } else {

        [_context setMergePolicy:NSMergeByPropertyStoreTrumpMergePolicy];
    }
Run Code Online (Sandbox Code Playgroud)

谢谢.

编辑:有必要吗?对于两种类型的线程,我应该默认为一个策略而不是另一个策略吗?

Art*_*sev 3

我最终采用了这个解决方案(一年多前),但由于我最近没有收到这个问题的答案,所以我决定提出自己的解决方案。

NSManagedObjectContext *context;

if ( [NSThread isMainThread] ) {

    context = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSMainQueueConcurrencyType];
    [context setMergePolicy:NSMergeByPropertyObjectTrumpMergePolicy];

} else {

    context = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType];
    [context setMergePolicy:NSMergeByPropertyStoreTrumpMergePolicy];

}
Run Code Online (Sandbox Code Playgroud)