iOS开发中,经常会遇到内存泄漏的问题,定位错误代码是很多人头疼的问题。你是否经历过,用了半天时间去解决一个内存泄露问题?

大多数情况下,我们通过在dealloc方法打断点,或用MLeaks等方法,比较容易地判断某个视图控制器,或某个View不能释放。却没有好的方法定位这个类中的问题代码。

下面,我教你如何使用Xcode用2分钟找到问题。

不知道大家有没有注意到Xcode Debug区有一个按钮,叫 “Debug Memory Graph” , 下面的内容就围绕这个功能展开。

image

我写了一个页面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 按钮,稍等片刻,可以在左侧看到当前内存中所有的对象,下方输入框可以已筛选

image

点击选中TestViewController的实例,可以看到这个对象被TestManager 的_testBlock持有

image

然后我们查看对_testBlock赋值的代码,就可以轻松定位问题啦

image

image

Demo链接

OVER