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

时间:2015-01-12 05:33:44

标签: ios objective-c memory parse-platform memory-profiling

我有一个Parse拒绝让我保存的对象,因为它的128kB限制......跟着这个方便的SO帖子:Checking the size of an object in 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采用了什么样的技巧,三个NSNumbers和两个指针在保存时占用128kB,我该如何调试呢?

2 个答案:

答案 0 :(得分:2)

对于那些寻找Parse为什么会出现此错误的答案的人来说 - 答案是Parse中存在一个错误。我采用了Ryan的建议,并使用断点进行了调试,并且对象确实远远超出了Parse声称它们的大小。

我清除了Parse数据库 - 错误全面消失,此后一直没有返回。

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

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

希望这有助于将来。

答案 1 :(得分:0)

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