在分析应用程序时,我注意到每次执行某些操作(涉及UIViews)时,实时字节数会增加约250 KB。
查看对象列表,主要(不断增长的)罪魁祸首只是“malloc 144字节”。
偶尔我会使用Allocations工具来发现我所持有的对象比我想要的更长,但我不确定如何解释“malloc”对象。
非常感谢任何指导。
答案 0 :(得分:11)
有几点想法:
分配工具很棒,但我首先关注的是Leaks。那里有健康的健康状况吗?
您是否通过静态分析器运行代码(“产品”菜单上的“分析”)。特别是在非ARC代码中,可以识别许多问题。
您使用ARC吗?如果是这样,那会缩小搜索范围。
你有僵尸开启吗?这将导致内存不被释放。一定要关掉僵尸。
您确定没有强大的参考周期(也就是保留周期)吗?您可以在视图控制器的NSLog
中放置dealloc
或断点,并确保它被调用并确保您没有强引用周期(两个或多个对象之间的循环引用,这两者都不会导致发布)。 (如果您没有dealloc
方法,只需添加一个NSLog
语句。)未能invalidate
重复NSTimer
是一个很好的例子无意中引起强烈的参考周期。关键问题是您必须确认dealloc
正在发生。
你肯定是在弹出/取消视图控制器而不是推送/呈现另一个视图控制器的副本吗? (除了前面讨论的强参考周期外,({1}}方法中未能看到NSLog
/断点可能是由此引起的。)
在您的256(!)图片视图中,您正在dealloc
设置imageNamed
属性吗? image
方法缓存图像在获得内存警告之前不会释放内存(尽管在检索新图像时只会消耗内存,而不会重新检索现有图像)。
最重要的是,可能存在大量可能的问题,而且您的问题还不足以帮助我们诊断问题。你必须帮助我们缩小问题的范围。
但是开始查看你的控制器并确保它们像他们应该的那样被解除分配。我对144字节imageNamed
问题感到痛苦,但这不太可能是每次消耗250kb的罪魁祸首。 malloc
更可能是问题的症状,而不是问题的根源,我会专注于上面列出的更基本的事情,然后花费太多时间来追踪{{1}的来源电话。