【问题标题】:ObjC Object Memory Profiling / Parse iOS 128kB LimitObjC 对象内存分析/解析 iOS 128kB 限制
【发布时间】:2015-01-12 05:33:43
【问题描述】:

我有一个 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 包含的分析器和标准 C/C++ 工具(如 Valgrind),但我不确定特定对象上的内存自省来判断哪个属性占用了它的 RAM...

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

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

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

    【讨论】:

    • 很高兴您找到了解决方法!
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-08-10
      • 1970-01-01
      • 2010-09-11
      • 2012-05-09
      • 1970-01-01
      • 2011-10-18
      • 1970-01-01
      相关资源
      最近更新 更多