欢迎光临
梦想从学习开始!

我是如何检测内存泄露的?| 小熊测试

本文主要介绍 我是如何检测内存泄露的?| 小熊测试,小熊希望对大家的学习或者工作具有一定的参考学习价值,在测试领域有所提升和发展。

  在iOS开发中我们经常用到block,无论是GCD还是参数传递,block都是一个很不错的选择。然而有利也有弊,block会产生循环引用,但是这代码通常不会报错,只是运行结果不正确!于是花费大量时间打断点调试,发现原来问题在这里:

  dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)),dispatch_get_main_queue(), ^{

  self.view.backgroundColor = [UIColor redColor];

  });

  这里的block中用了self,导致viewcontroller不能调dealloc,每次被这个坑了的时候,内心都几乎是崩溃的…… 于是写了个脚本来检测这个问题,效果大大的好。

  以下是正题

  block长什么样?它大概长这样子:一个^后面有{和},介于此我们就能查到几乎所有代码里面的block了,那么block里面的self怎么识别?weakSelf算吗,当然不算,按照语法:如果一个self字段它的前后都不是字母数字下划线(好好理解下这句话),那它就是我们要找的self。按着这个思路block里面的self便无所遁形了。然后按着如下写脚本(代码在文末):

  1、遍历工程里面的所有.m文件

  2、查找^

  3、匹配后面的一对{}记住位置

  4、查找{}里面符合规则的self

  5、调用mac的通知中心通知自己哪里有问题

  最终效果如下:

您现在正在阅读的是由小熊分享邦为您整理的 我是如何检测内存泄露的?| 小熊测试
  想要调用mac的通知中心,首先需要pyobjc库,安装后脚本就可以正常运行了,需要设置的参数如下:

  1.projectPath(工程所在路径)

  如:projectPath = "/Users/yuyang/Documents/techwolf/mobile_ios"

  2.noPath(不检测路径)

  如:noPath = ['ThirdLibs','iosTools']或:noPath = None(检测工程下所有路径)

  如果这样用你觉得用着麻烦(毕竟每次都要开着终端),那么可以用炮筒机器人来减轻工作量,炮筒机器人是mac自带的就是这个:

  首先打开它

  把它拖到右面的工作区,然后选择python脚本

  清除里面的内容,把脚本的代码拷贝进去,最后生成这个app:

   当然你也可以设置这个为开机启动项。

  运行时的效果这样:

  最后,奉上代码: https://github.com/hades0918/CheckLeak,如果你觉得好用,给我个star鼓励下,谢谢!

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持小熊分享邦(www.xxfxb.com),希望大家能坚持软件测试之路,谢谢。

赞(0) 打赏
未经允许不得转载:小熊分享邦 » 我是如何检测内存泄露的?| 小熊测试

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏