教你2分钟定位iOS内存泄漏
iOS开发中,经常会遇到内存泄漏的问题,定位错误代码是很多人头疼的问题。你是否经历过,用了半天时间去解决一个内存泄露问题?
大多数情况下,我们通过在dealloc方法打断点,或用MLeaks等方法,比较容易地判断某个视图控制器,或某个View不能释放。却没有好的方法定位这个类中的问题代码。
下面,我教你如何使用Xcode用2分钟找到问题。
不知道大家有没有注意到Xcode Debug区有一个按钮,叫 “Debug Memory Graph” , 下面的内容就围绕这个功能展开。
我写了一个页面TestViewController,代码如下,
@implementation TestViewController
- (void)viewDidLoad {
[super viewDidLoad];
self.view.backgroundColor = [UIColor whiteColor];
[[TestManager manager] setTestBlock:^{
[self testAction];
}];
}
- (void)testAction {}
@end
@implementation TestManager
- (void)setTestBlock:(void(^)(void))block {
_testBlock = [block copy];
}
@end
下面我们运行项目,进入TestViewController,然后退出页面,点击Debug Memory Graph 按钮,稍等片刻,可以在左侧看到当前内存中所有的对象,下方输入框可以已筛选
点击选中TestViewController的实例,可以看到这个对象被TestManager 的_testBlock持有
然后我们查看对_testBlock赋值的代码,就可以轻松定位问题啦
OVER