iOS-内存泄露检测工具(MLeaksFinder)
来源:互联网 发布:淘宝页面装修教程 编辑:程序博客网 时间:2024/04/30 06:36
MLeaksFinder
MLeaksFinder helps you find memory leaks in your iOS apps at develop time. It can automatically find leaks in UIView and UIViewController objects, You can also extend it to find leaks in other kinds of objects.
译:
在你的iOS应用程序在开发阶段,MLeaksFinder可以帮你找到内存泄漏问题。它可以在UIView和UIViewController对象中自动发现泄漏,当内存泄漏时,会自动断点和打印出View-ViewController堆栈中的泄露对象。你也可以使用它检测其他类型对象的内存泄漏问题。
GitHub下载地址
MLeaksFinder GitHub下载地址
安装方法
一、手动安装
1、Add MLeaksFinder to your Target Dependencies and Link Binary With Libraries
在github上下载MLeaksFinder
开源库,将其中的MLeaksFinder
文件夹拖入到你的工程中
2、Click your app’s target, then “Build Settings”, search for “Other Linker Flags”, add ‘-ObjC’
选择你的app的target —> Build Settings —> search for “Other Linker Flags” —> add ‘-ObjC’
这样就可以了,不需要其他操作了,很简单吧
二、CocoaPods 安装
pod 'MLeaksFinder'
使用
*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Possibly Memory Leak.In case that MyTableViewCell should not be dealloced, override -willDealloc in MyTableViewCell by returning NO.View-ViewController stack: ( MyTableViewController, UITableView, UITableViewWrapperView, MyTableViewCell)'当发生内存泄露时,会自动打印出哪些控制器和视图没有被释放,会提醒你是否需要释放,如果不需要释放(比如单例),需要调用willDealloc方法,返回NO
内存泄露原因总结
ARC工程是可以重写dealloc方法,而且当对象被释放时会被调用,但不需要手动调用父类的dealloc,当调用[super dealloc]方法时会报错,因为系统会自动帮我们调用父类的dealloc方法,不需要重写;
但有些时候会发现控制器出栈的时候不会调用dealloc方法,归根结底,是因为当前控制器被某些对象 强引用 了,控制器的引用计数不为0,系统无法自动释放这部分内存,导致控制器也不能主动释放。
控制器被强引用的原因:
1、block块使用不当,导致循环引用。因为block会对方法中的变量自动retain一次。
引用外部变量需要使用 __block
调用self 需要 __weak
2、NSTimer没有销毁。在viewWillDisappear之前需要把控制器用到的NSTimer销毁
因为 target:self ,也就是引用了当前viewController,导致控制器的引用计数加1,如果没有将这个NSTimer 销毁,它将一直保留该viewController,无法释放,也就不会调用dealloc方法。所以,需要在viewWillDisappear之前需要把控制器用到的NSTimer销毁。
销毁方法:
[timer invalidate]; // 销毁timertimer = nil; // 置nil
3.viewController中的代理不是weak属性
例如代理要使用弱引用
@property (nonatomic, weak) id delegate;
因为代理是被控制器强引用的,所以自己需要使用weak弱引用
- iOS-内存泄露检测工具(MLeaksFinder)
- iOS内存泄露检测工具MLeaksFinder
- MLeaksFinder:精准 iOS 内存泄露检测工具
- MLeaksFinder:精准 iOS 内存泄露检测工具
- MLeaksFinder:精准 iOS 内存泄露检测工具
- MLeaksFinder:精准 iOS 内存泄露检测工具
- iOS开发中内存泄漏检测工具--MLeaksFinder
- MLeaksFinder 自动内存泄漏检测工具
- 精准 iOS 内存泄露检测工具
- 内存泄露检测工具
- 内存泄露检测工具
- 内存泄露检测工具
- 内存泄露检测工具比较
- 内存泄露检测工具 LeakInTheHole!
- 内存泄露检测工具
- 内存泄露检测工具
- 内存泄露及检测工具
- 内存泄露检测工具:free
- Java多线程--Thread中start()和run()的区别
- mpc8260 17
- 程序员技术练级攻略
- 特征工程
- Redis + Keepalived实现Redis的HA:
- iOS-内存泄露检测工具(MLeaksFinder)
- 关于于渊的自己写操作系统Windows环境搭建
- 高可用、开源的Redis缓存集群方案
- android中文件加密和解密的实现
- android NetworkInfo类
- linux下杀死进程(kill)的N种方法
- Android exercise 3
- mpc8260 18
- docker常用命令中文翻译