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