iOS内存泄露监测和修复
内存泄露的相关概念:
如果程序运行时一直分配内存而不及时释放无用的内存,程序占用的内存越来越大,直到把分配给该app的内存消耗殚尽,程序因无内存可用导致崩溃,这样的情况我们称之为内存泄漏。
内存泄露可能引发的问题:
1)内存消耗殆尽的时候,程序会因没有内存被杀死,即crash。
2)当内存快要用完的时候,会非常的卡顿。
3)如果是viewcontroller没有释放掉,引起的内存泄露,还会引起其他很多问题,尤其是和通知相关的。没有被释放掉的viewcontroller还能接收通知,还会执行相关的动作,所以会引起各种各样的异常情况的发生。(这一点尤为重要,项目中重点关注)
常见的检测监测方法:
1analyze静态分析:通过静态分析我们可以最初步的了解到代码的一些不规范的地方和一些代码逻辑上的错误;
2.leaks,xcode自带工具。
3.mleaksfinder,来自微信团队的监测工具,比较精准。有友好的弹框提示,可以定位到相关的类和发生内存泄露的步骤。
常见循环引用:
1.nstimer:创建定时器时,当前控制器引用而定时器了(为什么因引用定时器?后续要用到这个定时器对象),在给定时器添加任务时,定时器保留了self(当前控制器).这里就出现了循环引用.解决方法:控制器不再引用定时器(不太可能) ,定时器不再保留当前控制器(较为科学,直接停止掉即可)
2.gcd计时器,使用gcd的定时器,要注意使用weakself。
3.vc的内存泄露。解决方法:想要知道viewcontroller有没有被释放,一个方法就是可以通过看viewcontroller有没有执行dealloc方法。
4.block内存泄露。解决方法:打断引用循环关系。
5.delegate内存泄露。weak弱引用即可。
6.nsnotification内存泄露:weak弱引用即可。
具体内存问题和解决方案可以看我的github上面的demo。附上demo地址,欢迎提出宝贵意见。
推荐阅读
-
解决JS内存泄露之js对象和dom对象互相引用问题
-
一位面试官询问我:Java中的JVM内存溢出和内存泄露是什么
-
什么是野指针和内存泄露?如何避免野指针
-
定位并修复 Go 中的内存泄露问题
-
vue单页应用的内存泄露定位和修复问题小结
-
IOS的ARC导致内存泄露的几种情况和具体解决方案
-
小米MIUI系统漏洞致大量系统、软件和用户数据泄露及修复方法
-
iOS14.1正式版已知BUG汇总 iOS14.1正式版修复内容和已知错误介绍
-
宣布放弃20H2后首个补丁!Win10推送KB5010415更新:内存泄露得到修复
-
iPad app应用开发系列文章之三 -- iOS的多核编程和内存管理 iOS编程网络应用Objective-CAndroid