使用炮筒机器人(Automator)来检测内存泄漏-block相关(CheckLeak)
在iOS开发中我们经常用到block,无论是GCD还是参数传递,block都是一个很不错的选择。然而有利也有弊,block使用不注意的话会产生循环引用。
global_myAnimation(^{
self.view.backgroundColor = [UIColor redColor];
});
这里的block中用了self,导致viewcontroller不能调dealloc。
global_myAnimation(^{
self.view.backgroundColor = [UIColor redColor];
});
这里的block中用了self,导致viewcontroller不能调dealloc。
脚本思路:
block的样式:一个^后面有{和}
block里面的self:如果一个self字段它的前后都不是字母数字下划线(不是weakSelf活着wself),那它就是我们要找的self。
1、遍历工程里面的所有.m文件
2、查找^
3、匹配后面的一对{}记住位置
4、查找{}里面符合规则的self
5、调用mac的通知中心通知自己哪里有问题
block里面的self:如果一个self字段它的前后都不是字母数字下划线(不是weakSelf活着wself),那它就是我们要找的self。
1、遍历工程里面的所有.m文件
2、查找^
3、匹配后面的一对{}记住位置
4、查找{}里面符合规则的self
5、调用mac的通知中心通知自己哪里有问题
脚本使用方法:
需要安装的库
1.pyobjc
需要设置的参数
1.projectPath(工程所在路径)
如:projectPath = "/Users/abc/Documents/iostest"
2.noPath(不检测路径)
如:noPath = ['ThirdLibs','iosTools']
或:noPath = None(检测工程下所有路径)
3.NormalCheck(普通模式,False:检测所有,True:不检测不检测路径和动画产生的self)
如:True
1.pyobjc
需要设置的参数
1.projectPath(工程所在路径)
如:projectPath = "/Users/abc/Documents/iostest"
2.noPath(不检测路径)
如:noPath = ['ThirdLibs','iosTools']
或:noPath = None(检测工程下所有路径)
3.NormalCheck(普通模式,False:检测所有,True:不检测不检测路径和动画产生的self)
如:True
1、打开Automator
2、点击新建
3、选择工作流程,然后点击选取
4、点击实用工具->运行Shell脚本
5、双击 运行脚本
6、选择/usr/bin/python
7、清除里面的内容,将脚本复制粘贴到里面,运行就可以。
8、
9、