从 API 导入数据并在 iPhone 应用程序中循环数据的最有效方法是什么? [已关闭]

问题描述 投票:0回答:1

我正在使用 Objective-C 开发一款全新的 iPhone 应用程序,我想确保它从下到上都坚固耐用。因为我有幸从头开始构建。

向 JSON API 发出 http 请求并存储数据以便在应用程序中进行操作的最有效方法(创建的内存占用最小)是什么?

ios objective-c data-manipulation
1个回答
1
投票

如果您的 Web 服务 API 支持 JSON,则使用 JSON。

JSON 解析器将解析 JSON 文本(如从请求的响应数据中接收到的)并将其“转换”为相应的 Foundation 对象层次结构 - “表示”。这很容易完成,只需几行代码即可。

根据您的描述,网络相关代码应该使用委托方法通过

NSURLConnection
来实现,这也是异步的。当您需要自定义身份验证和证书处理时,您必须使用委托方法。

对于中等大的数据集,您当然可以选择可行的第三方网络库之一。他们也将支持身份验证和证书处理的定制。

关于您如何处理数据的问题:

一旦您拥有代表您的资源的 Foundation 对象(例如,可能是用户或用户列表等),您就可以使用该 Foundation 对象并创建或更新相应的“模型”。 “模型”是“数据”的表示,例如用户或用户列表,通常是自定义类,可能是核心数据管理对象。

当数据“小”时,这种简单的方法适用于几乎所有用例。

当涉及到“大”数据集时,这种方法就不再适用了。经验法则:分配给 Foundation 对象的内存量大约是 JSON 文本字节大小的 5 到 8 倍。例如,30 MB 的 JSON 将需要大约 200 MB 的空间来表示。即使在现代设备上,考虑到还有其他分配,这也可能会导致内存警告。

处理“非常大”的数据集的一个解决方案是分块处理数据。也就是说,使用“许多”可能“不同的专用”和“专业”“任务”,其工作负载仅需要一个“小”数据集。让这些任务并行运行尽可能。 (我需要在这里停下来;)) 为了持久保存您的数据,您可以直接使用 SQLite,或者您可能想要使用 Core Data - 它使用 SQLite 作为后备存储。 如果您只是想从数据库(这是一个大型数据集)获取或插入对象,您可以考虑使用 SQLite - 而不是出于性能原因而使用 Core Data。

如果您对“模型”对象有编辑、创建、删除、合并和搜索操作,这些操作将由用户通过 UI 执行,或者通过在 UI 中显示结果的其他任务执行,您可能会想要使用 Core Data 。 注意:Core Data 不是数据库。 对第三方网络库的一句话:

我还没有看到任何可以在某些用例中提供我想要的灵活性的产品。更重要的是,没有一个是“可扩展的”。也就是说,当您拥有大型数据集(>10MByte)时,您的应用程序开始变得不理想 - 性能方面和内存占用方面。对于大型和非常大的数据集,您的应用程序可能会阻塞。

这些库中的大多数会将整个响应数据累积在一个

NSMutableData

对象中,并且不会让您在收到的块到达时轻松处理它们。解决方法是使用临时文件 - 这需要在您的应用程序中添加额外的详细代码。请注意,尝试解析 30 MB JSON 文件后,您可能会收到内存警告 - 通过 Wifi 传输需要 7 秒。

数据集在几兆字节的范围内,但这并不是常见情况。

© www.soinside.com 2019 - 2024. All rights reserved.