这里展示一个基于工具类,二次分析的示例:
YFMemoryLeakDetector * memoryLeakDetector = [YFMemoryLeakDetector sharedInstance]; /* 控制器检测结果的输出. */ [memoryLeakDetector.loadedViewControllers enumerateKeysAndObjectsUsingBlock:^(NSValue * _Nonnull key, id _Nonnull obj, BOOL * _Nonnull stop) { UIViewController * vc = (UIViewController *)[key pointerValue]; if (!vc.parentViewController) { /* 进一步过滤掉有父控制器的控制器. */ NSLog(@"有内存泄露风险的控制器: %@", obj); } }]; /* 视图检测结果的输出. */ [memoryLeakDetector.loadedViews enumerateKeysAndObjectsUsingBlock:^(NSValue * _Nonnull key, id _Nonnull obj, BOOL * _Nonnull stop) { UIView * view = (UIView *)[key pointerValue]; if (!view.superview) { /* 进一步过滤掉有父视图的视图,即只输出一组视图的根节点,这样便于更进一步定位问题. */ NSLog(@"有内存泄露风险的视图: %@", obj); } }]; 参考文章YFMemoryLeakDetector 源码
Aspects– iOS的AOP面向切面编程的库
MLeaksFinder 新特性
MLeaksFinder:精准 iOS 内存泄露检测工具
iOS内存泄漏自动检测工具PLeakSniffer