iOS开发 ARC下造成内存泄露的问题

来源:互联网 发布:如何找回域名密码 编辑:程序博客网 时间:2024/05/20 23:33

新到公司,着手准备跟进项目,但是发现内存越来越大,项目是arc的,于是在某个viewcontroller中加入了dealloc方法打断电,发现viewcontroller果然没有释放,找啊找:


先是把所有的block中用到的self换成了weakself,结果还是不行;


又用instrument看,搞了半天发现这工具还是特么的鸡肋,跟我显示
这里写图片描述
然后我就不能懂了,去stackoverflow问老外,老外啪啪啪给我解释了一通,原来是个系统库生成的单例,一直不会释放的,叫我不要怪instruments,它是无辜的。。。


然后我只有最笨的办法了,一段一段地删除代码,看什么时候会进入dealloc,找着找着发现这个viewcontroller的superviewcontroller 的superviewcontroller中定义了一个内部全局变量

@interface GrandfatherViewController(){    id        _leftTarget;}@implementation GrandfatherViewController...-(void) xxxMethord:(id)target{    _leftTarget = target;}...@end

这个xxxmethord是被GrandfatherViewControllere 的子类superviewcontroller饶了几个弯调用的,而且传入的参数是self。类似的内部变量持有self的问题大概存在两三处,解决掉这个问题之后果然起作用了。dealloc终于被调用了。

0 0