当前位置: 首页 > 面试题库 >

为iPhone创建JSON存储

柴彬
2023-03-14
问题内容

我们有大量的应用程序,其中我们以JSON的形式从远程Web服务中获取数据,然后使用解析器将其转换为Core-Data模型。

对于我们的一个应用程序,我认为我们应该做一些不同的事情。

此应用程序具有 只读数据* ,该 数据 易失 ,因此 不会在本地缓存很长时间 。JSON 具有 大量嵌套的“对象”
层次结构 。文档通常包含不超过20个顶级项目,但最多可以包含10万个。
*

我不认为我想创建一个包含100个实体的Core
Data模型,然后使用映射器将JSON导入其中。好像是一种歌舞。我想我只想将JSON持久保存在某个地方,并能够查询它。如果MongoDB在iPhone上运行,它将很好。

iPhone上是否有支持查询的JSON文档存储?

或者,我可以使用某些JSON解析器将数据转换为某种持久性NSDictionary并使用谓词进行查询吗?

还是将SQLite用作在JSON结构上手动创建索引的BLOB存储?

或者,我应该停止抱怨,并使用核心数据吗?:)

帮助表示赞赏。


问题答案:

在决定使用哪种持久性时,重要的是要记住,核心数据首先是对象图管理系统。真正的功能是创建Model-View-
Controller设计模式应用程序的运行时模型层。持久性实际上是核心数据的辅助功能,甚至是可选功能。

主要的建模/持久性问题是数据的大小和数据的复杂性。因此,每种持久性的相对优势和劣势将分解如下:

    _______________________________
    |               |              |
  2 |               |              |
    |  SQL          |  Core Data   | 4
s   |               |              |
i   |_______________ ______________|
z   |               |              |
e   |               |              |
  1 |  Collection   |  Core Data   | 3
    |  plist/xml    |              |
    |               |              |
    -------------------------------  
              Complexity--->

我们可以在其中添加第三个出租人维度,即波动性,即数据更改的频率

(1)如果数据的大小,复杂性和易变性低,那么使用序列化自定义对象的集合(例如NSArray,NSDictionary,NSSet)将是最佳选择。必须将集合完全读取到内存中,以限制其有效持久性大小。它们没有复杂性管理,所有更改都需要重写整个持久性文件。

(2)如果大小很大但复杂度很低,则SQL或其他数据库API可以提供出色的性能。例如,旧的时尚图书馆索引卡系统。每个卡都是相同的,卡之间没有关系,卡也没有行为。SQL或其他过程数据库非常擅长处理大量低复杂度的信息。如果数据很简单,那么SQL甚至可以有效地处理易失性数据。如果UI同样简单,那么将UI集成到iOS
/ MacOS应用程序的面向对象设计中的开销很少。

(3)随着数据变得越来越复杂,核心数据迅速变得更加优越。“托管对象”的“托管”部分管理关系和行为的复杂性。使用集合或SQL,您可以手动管理复杂性,并且很快就会陷入困境。实际上,我已经看到有人尝试使用SQL管理复杂数据,但最终他们编写了自己的微型Core
Data堆栈。不用说,将复杂性与波动性结合起来,Core Data会更好,因为它可以自动处理插入和删除的副作用。

(接口的复杂性也是一个问题。SQL可以处理大型的静态单一表,但是当您添加可以随时更改的表层次结构时,SQL会成为噩梦。不重要的。)

(4)Core
Data具有很高的复杂性和规模,显然是上乘的选择。核心数据经过高度优化,因此增加图形大小不会像使用SQL那样使事情陷入困境。您还将获得高度智能的缓存。

另外,不要混淆“我完全理解SQL,但不了解Core Data”和“ Core Data具有高开销”。确实没有。即使Core
Data并不是获取持久性数据的最便宜方法,但如果考虑到开发速度和可靠性,它与API其余部分的集成通常也会产生出色的结果。

在这种特殊情况下,我无法从描述中得知您是案例(2)还是案例(4)。它取决于数据的内部复杂性和UI的复杂性。你说:

我不认为我想创建一个包含100个实体的Core Data模型,然后使用映射器将JSON导入其中。

您是在这里指的是实际的抽象实体还是仅仅是托管对象?请记住,实体对托管对象而言,类对实例而言。如果是前者,那么是的,Core
Data将需要大量工作,如果是后者,则不会。您可以仅使用两个或三个相关实体来构建非常大的复杂图。

还要记住,即使在运行时它们都共享一个上下文,也可以使用配置将不同的实体放入不同的存储中。这可以让您将临时信息放入一个存储中,像更持久的数据一样使用它,然后在完成存储后将其删除。

核心数据为您提供的选择比乍看之下要多。



 类似资料:
  • 所以我想不通这个看似最简单的问题。我希望创建HttpEntity,其中header具有内容类型application/Json,主体是一个空的Json对象:

  • 问题内容: 我想快速创建一个像这样的json: 如何创建此json? 问题答案: 创建您的对象,在这种情况下为字典: 从对象创建JSON数据: 如果需要,请使用JSON数据作为字符串:

  • 原文: http://exploringjs.com/impatient-js/ch_json.html JSON(“JavaScript Object Notation”)是一种使用文本对数据进行编码的存储格式。它的语法是 JavaScript 表达式的一个子集。例如,考虑以下数据,以文本形式存储在文件jane.json中: { "first": "Jane", "last": "P

  • 主要内容:创建一个远程存储库在本章中,我们将看到如何创建一个远程Git仓库; 我们需要一个远程Git仓库来执行团队协作。这一篇文章很重要,直接影响到后面的章节的学习。所以,希望大家可先耐心地看完本章内容,并按本章一步步的操作。 创建一个远程存储库 我们将演示在 http://git.oschina.net/ 软件项目的托管平台上创建和初始化一个新的存储库。 注:你也可以使用 GitHub (http://github.com

  • 问题内容: 我正在尝试使用jQuery UI创建动态菜单。 我将从JSON文件中获取条目并创建菜单项。在大规模尝试之前,我决定做一个小演示。这是我的小提琴,它按照我想要的方式工作。现在,我无法将其与JSON文件一起使用。 工作场所 这是JSON 我如何使用JSON中的值设计我的整个菜单,其中Li类似于以下内容。 编辑: 这个问题听起来好像我还没有尝试过,但是我已经尝试过。它只是我无法理解的JSON

  • 问题内容: 我希望创建如下的json: 在android中。这是我到目前为止的内容: 谁能帮我? 问题答案: 您可以在主JSON对象中放置另一个JSON对象: