我可以快照并恢复Objective-C对象图的内存吗?

问题描述:

我正在设计一个对象持久代码。 IMO,内存快照是最快,最可靠和紧凑的永久性方法。我可以快照并恢复Objective-C对象图的内存吗?

C结构很简单。我可以手动布局所有对象的内存布局。我可以将所有引用保存为对象集合的索引。所以参考不是问题。

无论如何,我想尝试与Objective-C对象。为此,对象必须位于内存的特定位置。所以,如果我可以指定分配的内存位置,我可以快照内存。当恢复时,我可以在特定地址获得对象。

当然,所有这些都是机器特有的,需要很多技巧,但对我来说很好。 唯一的问题是我不知道如何指定新的Objective-C对象的位置。我怎样才能做到这一点?

通常人们使用NSCodingNSKeyedArchiver(或其一些自定义子类)。我认为你的C方法会在64位运行时之前工作,因为对象的数据部分是使用结构实现的,但我认为新的运行时使用非易失性实例变量会使问题复杂化。在任何情况下,加载持久化对象的程序仍然需要为它们定义类别定义,可以是硬编码的,也可以是通过bundle加载的。