ios - 多个 MIC 的 Rest Kit 持久性/性能问题

标签 ios multithreading core-data restkit

这是我第一次使用新版本的 RestKit 和多个 MOC,所以这让我有点难过。我正在使用 RestKit 0.20-pre5 并通过 RestKit 操作以及在整个应用程序中手动添加托管对象。

RestKits 提供了两个 MOC 来管理性能:mainQueue 和 PersistantStore 对象上下文。通过检查 RestKits 代码,所有新的托管对象都保存到 mainQueue MOC(基于 RKObjectManager line 433 和检查各种指针地址)。由 RestKit 创建的对象可以很好地持久化(当然在调用保存之后)但是每当我在同一个 mainQueue MOC 中创建自己的 ManagedObjects 并保存它时,当我重新启动应用程序时它们不会持久化。 (我经常保存相关的 MOC)

这就是持久性存储的用武之地。每当我将持久性存储与 mainQueue MOC 一起保存时,数据就会持续存在。我想这与 RKManagedObjectStore 合并更改有关,每当我在 persistantStoreMOC 上调用保存时(通过通知)所以......一切都好吧?

问题是,每当我保存两个上下文时,都会有明显的滞后,至少持续 1 秒(最多可达 3 秒!)。这种滞后似乎会增加我创建的 NSManagedObjects 的数量。我已经运行仪器并且没有内存问题。我一定是错误地使用了核心数据的 RestKits 实现。

为了记录,我使用以下方法保存:

- (void)saveContext
{
    __block BOOL _blockSuccess;
    __block NSError *_blockError;

    NSManagedObjectContext *persistantContext = [[[RKObjectManager sharedManager] managedObjectStore] persistentStoreManagedObjectContext];

    [globalManagedObjectContext performBlockAndWait:^{
            _blockSuccess = [globalManagedObjectContext save:&_blockError];
    }];
    if (! _blockSuccess) NSLog(@"Failed to save context: %@", _blockError);

    [persistantContext performBlock:^{
        _blockSuccess = [persistantContext save:&_blockError];
        if (! _blockSuccess) NSLog(@"Failed to save context: %@", _blockError);
    }];
}

每当我们想要保存应用程序的状态时,都会从单例对象中调用它。 (globalManagedObjectContext 只是一个指向 RestKits mainQueueObjectContext 的宏)。删除 persistantContext 保存会消除延迟,但当然不会保留数据。

任何人的帮助(尤其是 Blake Watters ;)将不胜感激!

干杯,

阿隆

最佳答案

我相信答案是使用 RKAdditions 类别添加到 NSManagedObjectContext 的 saveToPersistentStore: 方法。

这取自herehere .

您在使用时还有问题吗?

关于ios - 多个 MIC 的 Rest Kit 持久性/性能问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14472467/

相关文章:

iphone - UITableview 未正确放置在 uiscrollview 中

java - 如何监视 Java 线程堆栈的内存

iphone - @synchronized如何工作? [复制]

cocoa - NSManagedObject 未保存——谨防反向关系

iOS 核心数据错误 - 对多关系的值类型 Not Acceptable

ios - Xamarin Forms App 在 iOS 上以 Release模式崩溃,但在 Debug模式下工作

ios - 如何使用代码将 UITableView 放在 UILabel 下方

java - 线程中静态同步和非静态同步方法的行为差异

ios - 普通核心数据 vs 核心数据 + 魔法记录

iphone - 如何使用 cocoa touch 做无限滚动图像