ObjC 对象内存分析/解析 iOS 128kB 限制



我有一个对象,Parse 拒绝让我保存,因为它的限制为 128kB...跟随这篇方便的SO帖子:在Objective-C中检查对象的大小,我能够将有问题的对象的大小输出为144(malloc_size没有具体说明其单位,但我假设字节)。如果这是以 kB 为单位,则我的对象确实超过了 128kB 的限制。但是,这个对象永远不应该在 kB 范围内 - 它是两个指针和一个三个 NSNumber(用作布尔值)...即使允许在64位系统上进行对象开销和过度分配,我们仍然在200字节范围内 - 使用Parse的开销,我们将安全地说1kB。还。。。远小于128kB。

具体错误为:Error: The object is too large -- should be less than 128 kB. (Code: 116, Version: 1.5.0)

这让我想到 - 有哪些好的工具来测试或日志语句来调试此类问题?我最熟悉 Apple 包含的分析器和 Valgrind 等标准 C/C++ 工具,但我不确定特定对象的内存内省以判断哪个属性占用了它的 RAM......

更具体地说,上面列出的项目 - Parse 采用了什么样的技巧,使得三个 NSNumber 和两个指针在保存时占用 128kB,我该如何调试它?

对于那些寻找 Parse 给出此错误的原因答案的人 - 答案是 Parse 中存在一个错误。我接受了 Ryan 的建议,并另外用断点进行了调试,这些对象确实远不及 Parse 声称的大小。

我清除了 Parse 数据库 - 错误全面消失,此后再也没有回来。

对于那些希望进行分析的人来说,Apple的内置分析器是一个很好的起点(产品>配置文件>分配) - 之后,从原始问题的链接输出特定成员变量的内存大小,然后在所有其他方法都失败时,使用LLVM控制台中的断点和打印大小。

不幸的是,我一直无法找到一种更自动化的方式来完成所有这些工作。

希望这对将来的某人有所帮助。

调试对象大小的一种简单方法是在运行时使用断点在 Xcode 中。在尝试保存之前,使用断点检查内存中的对象大小。您还可以通过一系列虚拟对象按组件分解对象,以单独获取它们的大小。

最新更新