首页 文章

核心数据和SQLite理想的使用场景[已关闭]

提问于
浏览
0

我已经为iPhone编程了大约2年了,作为我编程的应用程序的一部分,我已经使用了SQLite和Core Data来实现持久性,但是在某些情况下,一个更好,更优化作为解决方案然后另一方面,首先我要强调的是,我完全认为Core Data不是,并且不像SQLite那样设计为RDBMS,但是API非常方便,您可以从使用它中获得一些真正的好处 .

因此,在我的应用程序中,我直接使用SQLite而没有包装器,我真的不喜欢在我可爱的OO应用程序中直接与C函数交互 .

然后我决定学习核心数据有两个原因,首先我想熟悉这个框架,因为它是iOS开发环境中非常有用和现有的框架,就我的职业生涯而言,我想确保我知道这个框架,但乍一看它似乎是我的应用程序的完美解决方案 .

在坚果外壳中,它是一个应用程序,用户在其中生成自己的内容,因此使用Core Data可以非常令人满意地创建基于用户交互的数据集,但随后又将另一层添加到我的应用程序中,这是某种远程API同步,所以现在我有一个远程API endpoints 可以告诉我其他用户的一些数据,然后我不得不将其保存到应用程序并不时从远程源刷新,更新等,但是一旦我开始集成这个概念从远程源下载批量数据,我意识到Core Data并不像我希望的那么好,所以例如我的应用程序需要登录然后我会从远程源加载你的朋友数据(基于Facebook的朋友)使用此应用程序) . 因此,当我从应用程序注销时,我必须传递Core Data存储中的所有对象并删除它们,因为假设下一次登录是由不同的用户进行的,您不希望向该用户显示以前的用户朋友信息 .

我喜欢的Core Data有一个功能,那就是用于表格视图的Fetched Results Controller,这个功能很好,并且最大限度地优化了对象故障等...

然而问题仍然存在于远程同步,下载批量数据并逐个保存,删除它们以保持最新,似乎很多循环,加载和操作,特别是当你认为这只会是一个SQL命令删除你朋友的所有记录,如果我为此选择了SQLite ...

所以我的问题是,根据你的说法,当Core Data应该优先于SQLite,反之亦然时,什么是最佳的上下文,开始,我仍然试图真正想出一个,我做了一个简短的应用程序列表和什么我认为他们使用:

•面向Mac的FaceTime:似乎所有通话/未接来电,通话时长,收藏夹的数据存储都是核心数据 .

•Twitter iOS应用程序:鉴于用户可以在此应用程序中拥有大量数据,我猜测它使用SQLite,但我可能错了......

在我看来,你会更多地考虑用户内容生成场景中的核心数据,以及更大的集/远程数据同步场景中的SQLite解决方案,但有时这两个场景在同一个应用程序中汇集在一起,我知道一些开发人员在同一个应用程序中混合和匹配,但我想得到你的看法,任何人都可以说任何特定的应用程序,他们知道一个或另一个正在使用,作为一个好奇的问题 .

最后我知道或其他Stack Overflow问题 Headers 为“核心数据与SQLite”等,但这真的是要分析它,谢谢 .

1 回答

  • 3

    因此,当我从应用程序注销时,我必须传递Core Data存储中的所有对象并删除它们,因为假设下一次登录是由不同的用户进行的,您不希望向该用户显示以前的用户用户朋友信息 .

    为什么不将从远程存储中下载的数据与用户实体相关联?那么,您不必删除数据,而只是获取新用户的数据?

    Twitter iOS应用程序:鉴于用户可以在此应用程序中拥有的大量数据,我猜测它使用SQLite,但我可能错了......

    处理大型数据集时,核心数据非常好 . 我 Build 了一个应用程序,一旦在DB中有120k记录,Core Data就像冠军一样处理它 - 只要你完全理解它是如何工作的以及如何优化你的提取 . 有关此信息,请务必查看相关的WWDC视频和文档 .

    总的来说,我认为Core Data可以处理你可以抛出的大部分用例 . 此外,不要认为它不能简单地因为你看不到它会如何 - 它会让你感到惊讶 . 在测试中,我发现,由于它使用的缓存机制,我发现Core Data比本机SQL Code更快 . 始终根据您在仪器上运行的测试来确定有关核心数据的设计决策 . 就在今天早上,我发现我认为效率较低的东西比以“正确”的方式做得更快 .

    最重要的是,如果你在乐器中运行你的应用程序并且对优化有所了解 - 根据你的仪器结果,而不是你的直觉---核心数据将适合大多数账单 .

相关问题