美文网首页iOSiOS_SOI-iOS精华iOS进阶指南
iOS小记-在pop的时候没有走dealloc,这时候你应该当心

iOS小记-在pop的时候没有走dealloc,这时候你应该当心

作者: SOI | 来源:发表于2015-11-19 10:58 被阅读853次

    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里面直接引用实例变量也是会造成循环引用(大家一定要注意哦)

    相关文章

      网友评论

        本文标题:iOS小记-在pop的时候没有走dealloc,这时候你应该当心

        本文链接:https://www.haomeiwen.com/subject/dkjlhttx.html