使用 Restkit 或不使用 CoreData

Posted

技术标签:

【中文标题】使用 Restkit 或不使用 CoreData【英文标题】:CoreData or Not with Restkit 【发布时间】:2013-11-04 21:25:41 【问题描述】:

问题是Reskit是否使用CoreData,这是因为我不知道使用它有什么好处或建议在什么情况下使用它。

这个问题是因为我有一个使用CoreData的应用程序(老开发者做了这个工作),我觉得它消耗了大量资源并且使应用程序变慢。

我有一个新闻源,所以这里的数据总是在变化,所以我不需要保留我认为的数据?但是我有一些对象,比如我的个人资料图片和偏好,我想在本地存储。

*更新*

这是定义“持久性”的代码(我认为)

NSManagedObjectModel *managedObjectModel = [NSManagedObjectModel mergedModelFromBundles:nil];
    RKObjectManager* man = [RKObjectManager managerWithBaseURL:[NSURL URLWithString:BASE_URL]];
    man.requestSerializationMIMEType = RKMIMETypeJSON;
    [RKObjectManager setSharedManager:man];

    [AFNetworkActivityIndicatorManager sharedManager].enabled = YES;

    RKManagedObjectStore *managedObjectStore = [[RKManagedObjectStore alloc] initWithManagedObjectModel:managedObjectModel];
    man.managedObjectStore = managedObjectStore;

    //configuring Mappings
    /**some mappings**/

    [managedObjectStore createPersistentStoreCoordinator];
    NSString *storePath = [RKApplicationDataDirectory() stringByAppendingPathComponent:@"Database.sqlite"];
    NSError *error;
    NSPersistentStore *persistentStore = [managedObjectStore addSQLitePersistentStoreAtPath:storePath fromSeedDatabaseAtPath:nil withConfiguration:nil options:nil error:&error];
    NSAssert(persistentStore, @"Failed to add persistent store with error: %@", error);

    // Create the managed object contexts
    [managedObjectStore createManagedObjectContexts];

    // Configure a managed object cache to ensure we do not create duplicate objects
    managedObjectStore.managedObjectCache = managedObjectStore.managedObjectCache;

【问题讨论】:

您的性能问题是什么,为什么您认为是 Core Data 导致了这些问题?它实际上非常快速且经过良好优化,并且在大多数情况下会比直接使用 SQLite 存储提供更好的结果(并且更易于使用)。您的存储需求究竟是什么,您还在考虑什么?如果您根本不需要持久化数据,那么千万不要!否则,问题真的应该是“Core Data 的哪些替代方案更适合这个问题?” @ReidBelton 有时我认为映射需要很多时间?或将东西保存在本地数据库中,但我只是想理解它。也许我误解了一些东西,我认为它是CoreData?但我知道它使用的是 SQLite(参见更新)。与此同时,我只需要存储一些用户偏好和一些数据(如头像、简历和应用程序配置)......我认为这个问题是“错误的”,但我暂时无法表达另一个问题 Core Data 非常高效且非常易于使用。在我看来,几乎没有理由不使用 Core Data……我最近在 ios 中使用 SQLite 的唯一一次是我需要全文搜索的时候。如果您在使用 Core Data 时遇到性能问题,那么问题出在您的设计上,而 SQLite 不会解决这个问题。如果你没有问题......好吧,你没有问题:) 【参考方案1】:

使用核心数据。还可以查看使用获取的结果控制器(管理从数据存储中批量加载数据页面)。这对于新闻提要应用程序来说是完美的,您可能会拥有相对大量的提要项目,但在任何时候都不会显示太多(因此您不需要它们在内存中)。自己使用原始 SQLite 或磁盘上文件中的数据来管理它会做更多的工作,并且可能会降低性能。

【讨论】:

但数据仅用于“缓存”还是永久保存? ? Core Data 可以根据您的配置方式执行任何一项。使用 RestKit 时,它将创建一个持久(永久)存储。

以上是关于使用 Restkit 或不使用 CoreData的主要内容,如果未能解决你的问题,请参考以下文章

RestKit 与直接 CoreData

在 xcodebuild 期间未找到 RestKit/RestKit.h' 文件错误

不安地使用 RestKit

使用cocoapods的restkit项目集成错误

使用多个基本 URL 和多个对象管理器 (RestKit)

使用 RESTKIT 使用 Web 服务