加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ios – XCode – 了解分配工具

发布时间:2020-12-14 19:30:14 所属栏目:百科 来源:网络整理
导读:在分析应用程序时,我注意到每次执行某些操作(涉及UIViews)时,实时字节增加大约250 KB. 查看对象列表,主要(不断增长的)罪魁祸首只是读作“malloc 144字节”. 偶尔我使用Allocations工具来发现我所持有的对象比我想要的更长,但我不确定如何解释“malloc”对象.
在分析应用程序时,我注意到每次执行某些操作(涉及UIViews)时,实时字节增加大约250 KB.

查看对象列表,主要(不断增长的)罪魁祸首只是读作“malloc 144字节”.

偶尔我使用Allocations工具来发现我所持有的对象比我想要的更长,但我不确定如何解释“malloc”对象.

任何指导将不胜感激.

解决方法

几点想法:

>分配工具很棒,但我首先关注的是Leaks.你那里有健康的健康状况吗?
>您是否通过静态分析器运行代码(“产品”菜单上的“分析”).特别是在非ARC代码中,可以识别许多问题.
>你在使用ARC吗?如果是这样,那会缩小搜索范围.
>你有僵尸开启吗?这将导致内存不被释放.一定要关掉僵尸.
>您确定没有强大的参考周期(也就是保留周期)吗?您可以在视图控制器的dealloc中放置NSLog或断点,并确保它被调用并确保您没有强引用周期(两个或多个对象之间的循环引用导致两者都不被释放). (如果你没有dealloc方法,只需添加一个带有NSLog语句的方法.)不能使重复的NSTimer无效是一个很好的例子,可能会无意中导致强引用周期.关键问题是您必须确认dealloc正在发生.
>你肯定是在弹出/关闭视图控制器而不是推送/呈现另一个视图控制器的副本吗? (除了前面讨论的强引用周期之外,在dealloc方法中未能看到NSLog /断点可能是由此引起的.)
>在您的256(!)图像视图中,您是否正在使用imageNamed来设置图像属性? imageNamed方法缓存图像将不会释放内存,直到您收到内存警告(虽然它只会在您检索新图像时消耗内存,而不会重新检索现有图像).

最重要的是,可能存在大量可能的问题,而且您的问题还不足以帮助我们诊断问题.你必须帮助我们缩小问题的范围.

但是开始查看你的控制器并确保它们像他们应该的那样被释放.我对144字节malloc问题感到痛苦,但这不太可能是每次消耗250kb的罪魁祸首. malloc更可能是问题的症状,而不是问题的根源,在关注malloc调用源的过多时间之前,我会专注于上面列出的更基本的东西.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读