iphone - 将对象图持久化以在 iPhone 上闪烁的最佳方式

标签 iphone objective-c persistence object-persistence object-graph

我在 iPhone 平台上的 Objective-C 中有一个对象图,我希望在关闭应用程序时保持闪烁。该图有大约 100k-200k 个对象并包含许多循环(按设计)。我需要能够尽快读/写这张图。

到目前为止,我已经尝试过使用 NSCoder。这不仅与循环作斗争,而且还需要时间和大量内存来保存图形——可能是因为在幕后使用了 XML 文档。我还使用了 SQLite 数据库,但单步执行那么多行也需要大量时间。

我考虑过使用 Core-Data,但担心我会遇到与 SQLite 或 NSCoder 相同的问题,因为我相信 core-data 的后备存储将以相同的方式工作。

那么有没有其他方法可以以轻量级方式处理此对象图的持久性 - 理想情况下我喜欢 Java 的序列化?我一直在考虑尝试 Tokyo Cabinet或者将一堆 C 结构占用的内存写入磁盘 - 但这将是大量的重写工作。

最佳答案

我建议重写为 C 结构。我知道这会很痛苦,但它不仅可以快速写入磁盘,而且性能应该会好得多。

在有人不高兴之前,我并不是说人们应该总是使用结构,但在某些情况下,这实际上对性能更好。特别是如果您一次在 20k 连续 block 中预分配内存(使用指向 block 的指针),而不是在重复循环中创建/分配大量小块。

也就是说,如果您的循环不断地分配对象,那将会减慢它的速度。如果您预先分配了 1000 个结构并且只有一个指针数组(或单个指针),那么这会快很多。

(我遇到过这样的情况,即使是我的桌面 mac 也太慢,没有足够的内存来处理连续创建的数百万个对象)

关于iphone - 将对象图持久化以在 iPhone 上闪烁的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1292845/

相关文章:

ios - 使用设备的 UDID 在 Xcode 中制作 .app 文件

ios - Apple Itunes App Rejection 由于背景模式位置

ios - 我有很多格式,如 ####-##-##、(###)-###-####,我想将文本字段的值更改为给定格式,如何实现。?

java - entityManager.getTransaction().rollback() 分离实体?

java - 为什么我们在程序中使用java持久化而不是jdbc连接

iphone - 收到通知的频率比发送通知的频率高

objective-c - 你如何在 iOS 12.0 的 Xcode 中抑制 OpenGL 消息

ios - 获取 iOS 中包含的可信根证书的 PEM 文件(用于验证 gRPC)

ios - iOS 上的直播应用程序出现错误 849

后台应用程序时的 iOS 数据持久性