我是如何检测内存泄露的
▲点击上方“CocoaChina”关注即可免费学习 iOS 开发来源:hades0918投稿
这里的block中用了self,导致viewcontroller不能调dealloc,每次被这个坑了的时候,内心都几乎是崩溃的...... 于是写了个脚本来检测这个问题,效果大大的好。dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)),dispatch_get_main_queue(), ^{
self.view.backgroundColor = [UIColor redColor];
});
以下是正题
block长什么样?它大概长这样子:一个^后面有{和},介于此我们就能查到几乎所有代码里面的block了,那么block里面的self怎么识别?weakSelf算吗,当然不算,按照语法:如果一个self字段它的前后都不是字母数字下划线(好好理解下这句话),那它就是我们要找的self。按着这个思路block里面的self便无所遁形了。然后按着如下写脚本(代码在文末):
- 遍历工程里面的所有.m文件
- 查找^
- 匹配后面的一对{}记住位置
- 查找{}里面符合规则的self
- 调用mac的通知中心通知自己哪里有问题
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鼓励下,谢谢!
微信号:CocoaChinabbs
▲长按二维码“识别”关注即可免费学习 iOS 开发
月薪十万、出任CEO、赢娶白富美、走上人生巅峰不是梦
--------------------------------------
商务合作QQ:645047738
投稿邮箱:support@cocoachina.com
关注 CocoaChina
微信扫一扫关注公众号