APP内存泄漏检测

内存泄漏检测

检测内存泄漏的几种方式

静态检测分析

静态检测分析又分为两种,一种是手动静态分析,一种是自动静态分析

  • 手动


    image.png
  • 自动


    image.png

设置成YES,每次编译的时候都会帮你检测分析,上线的时候改成默认

静态分析的功能有限,只是静态的帮你分析,app运行期间发生的事它并不能帮你检测,比如循环引用什么的并不能检测出来

动态检测方法(instrucment工具)

这种方式比静态分析要好,但也不一定完全能检查出内存泄漏等问题

析构打印
-(void)dealloc{
    
    NSLog(@"%s",__func__);
}

其实就是看控制器有没有走dealloc,推荐开发过程中使用,内存泄漏主要也要在开发过程预防发生,所以正在开发的过程中根据析构打印是一件比较简单方便的事,也是一个好习惯,比较实用吧
如果走了dealloc,那么当前控制器肯定是没内存泄漏了,但是里面的对象有没有就确定了

第三方工具

自动化检测工具

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSArrayM enqueue:]: unrecognized selector sent to instance 0x60000024ef40'

在buddle Seeting 里面的Other Linker Flags 中添加-ObjC就可以了。

MLeaksFinder
项目直接pod就行了

简单小结:
1.在使用block时,如果block内部需要访问self的方法 属性 或者实例变量应当使用weakself
2.如果在block内需要多次访问self,则需要使用strongself
3.如果在block内部存在多线程环境访问,则需要使用strongself
4.block本身不存在多线程之分,block执行是否是多线程,取决于当前的持有者是否是以多线程的方法来调用他

但是点击发起微信支付

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容