美文网首页iOS开发iOS Developer程序员
iOS性能优化之内存泄露监测和修复

iOS性能优化之内存泄露监测和修复

作者: cocoa_ziyue | 来源:发表于2017-06-11 13:48 被阅读0次

    内存泄露:如果程序运行时一直分配内存而不及时释放无用的内存,程序占用的内存越来越大,直到把系统分配给该APP的内存消耗殚尽,程序因无内存可用导致崩溃,这样的情况我们称之为内存泄漏。

    内存泄露可能引发的问题:

    1)内存消耗殆尽的时候,程序会因没有内存被杀死,即crash。

    2)当内存快要用完的时候,会非常的卡顿。

    3)如果是ViewController没有释放掉,引起的内存泄露,还会引起其他很多问题,尤其是和通知相关的。没有被释放掉的ViewController还能接收通知,还会执行相关的动作,所以会引起各种各样的异常情况的发生。(这一点尤为重要,项目中重点关注)

    常见的监测方法:

    1.Analyze静态分析:通过静态分析我们可以最初步的了解到代码的一些不规范的地方和一些代码逻辑上的错误;

    2.Leaks,Xcode自带工具。

    3.MLeaksFinder,来自微信阅读团队的监测工具,比较精准。

    常见循环引用:

    1.NSTimer:创建定时器时,当前控制器引用而定时器了(为什么因引用定时器?后续要用到这个定时器对象),在给定时器添加任务时,定时器保留了self(当前控制器).这里就出现了循环引用.

    解决方案:1.控制器不再引用定时器(不太可能) 2.定时器不再保留当前控制器(较为科学,直接停止掉即可)

    2.GCD计时器,使用GCD的定时器,要注意使用weakself。

    3.VC的内存泄露。解决方法:想要知道ViewController有没有被释放,一个方法就是可以通过看ViewController有没有执行dealloc方法。

    4.block内存泄露。解决方法:打断引用循环关系。

    5.delegate内存泄露。weak弱引用即可。

    6.NSNotification内存泄露:weak弱引用即可。

    具体问题和解决方案可以看我的github上面的Demo。附上Demo地址,欢迎提出宝贵意见。

    iOS常见内存泄露解决方案

    相关文章

      网友评论

        本文标题:iOS性能优化之内存泄露监测和修复

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