iOS小记-在pop的时候没有走dealloc,这时候你应该当心了
字数461阅读1评论0喜欢0
没错, 你已经造成了内存泄露问题了,如果控制器以及相关联的属性非常多, 反复进出这样的界面, 内存就会暴涨了,你需要十分关注这个问题。而造成这个问题的大部分有几个方面:
以下引用@沉默学飞翔 作者的文字
*********************************************************************************************
我控制器里面有通知,块比较是容易导致强引用,所以我就在这里面一句一句的去检查,结果在块里面发现了问题。我在块里面有一个地方居然调用self没有用他的弱引用形式,所以导致了self的count加一,最后直接导致控制器在pop的时候没有走dealloc这个方法。
总结了一下控制器被强引用不走dealloc的原因无非就是三中情况:
一.block块使用不当。因为block会对方法中的变量自动retain一次。请检查控制器中block代码。(我的就是因为这没有走dealloc)
二.NSTimer没有销毁。在viewWillDisappear之前需要把控制器用到的NSTimer销毁。
三.控制器中的代理属性一定要是弱引用,不要强引用。
*********************************************************************************************
其中,我要说的是, 最主要的就是block造成的循环引用, block里面只能用弱化的self调用其属性才会避免循环引用,在我现在所在项目里发现, 虽然很多同学注意到了这一点, 但是在block里面直接引用实例变量也是会造成循环引用的, 读者可以测试一下, 大家一定要注意!
总结: 1.dealloc没有调用以上三个原因
2.在block里面直接引用实例变量也是会造成循环引用(大家一定要注意哦)