iOS 内存泄漏监测自动化
在 Android 上,Square 这家公司提供了非常有名的工具: leakcanary ,来帮助开发者们在日常开发过程中就能够发现内存泄漏。但在 iOS 上呢?在 Google 的时候,我发现了两个工具,一个是这篇文章将要翻译并介绍的 Facebook 开源的三件套,另一个则是国内微信阅读团队做的 MLeaksFinder 。
关于 MLeaksFinder 这里有两篇其官方提供的文章介绍:
简而言之,MLeaksFinder 使用了一个非常 tricky 的方法来检测内存泄漏:通常一个 UIViewController 在被 pop 之后将会很快被释放,假设在 pop 3 秒钟之后仍然没有被释放,则可以认为这个 UIViewController 存在泄漏的问题(其实类似的方案同样也可以在 Android 上实现,据我所知微信在早期就有类似原理实现的用在 Android 上的内存泄漏监测工具了)。在后续的更新版本中,MLeaksFinder 也依赖了 Facebook 的 FBRetainCycleDetector 来辅助判断内存泄漏是否是由循环引用引起的。
MLeaksFinder 的原理非常简单但有效,帮助我排查了 App 中存在的不少内存泄漏问题,而且对于整个应用基本零侵入,不需要做任何的配置与修改。不过缺点也在这里,因为如果要将其作为日常自动化的工具使用的话,我希望 MLeaksFinder 本身可以提供回调接口,以便在内存泄漏发生时我可以选择是弹出 Alert 提示开发者,还是通过后台上报的方式提交。当然,开源的好处在于可以修改源码满足自己的需求,后续也会向其提交 PR,完善这个非常精巧的项目。
Facebook 的工程师们其实早就已经将 iOS 的内存泄漏排查自动化了,并发布了一篇非常不错的文章来介绍其原理,以及开源了他们的三个工具套件。为了加深对 Objective-C 内存管理的理解以及对库的原理的了解,在文末,会有我对这全篇英文文章的翻译。
对于工程师而言,自动化的工具真的是排名前几的生产力。
如果不想看翻译的话,这里也提供一个大概的全文重点概览:
- 三个开源工具:
- FBRetainCycleDetector
- 主要用于检测循环引用
- FBAllocationTracker
- 主要用于快速检测潜在的内存泄漏对象,并提供给 FBRetainCycleDetector 进行检测
- FBMemoryProfiler
- 可视化工具,直接嵌入到 App 中,可以起到在 App 中直接查看内存使用情况,并筛选潜在泄漏对象的作用
- FBRetainCycleDetector
- Facebook 的自动化:客户端自动监测 -> 上报服务端 -> 归类/筛选 -> 分发给指定人员 -> 处理内存泄漏
- 未开源的部分在于服务端如何对上报的循环引用链进行归类与筛选,不过 Facebook 的工程师们在文中给出了他们自己的策略
https://www.ctolib.com/topics-104295.html
iOS 内存泄漏监测自动化的更多相关文章
- 内存泄漏监测-LeakCanary
内存泄漏监测方法之使用LeakCanary LeakCanary出处: github:https://github.com/square/leakcanary/issues square 公司 这个公 ...
- 讲述Sagit.Framework解决:双向引用导致的IOS内存泄漏(中)- IOS不为人知的Bug
前言: 话说昨晚还是前晚,写了一篇:讲述Sagit.Framework解决:双向引用导致的IOS内存泄漏(上) 文章写到最后时,多了很多莫名奇妙的问题!!! 为了解决了这些莫名奇妙的问题,我又战斗了2 ...
- 讲述Sagit.Framework解决:双向引用导致的IOS内存泄漏(下)- block中任性用self
前言: 在处理完框架内存泄漏的问题后,见上篇:讲述Sagit.Framework解决:双向引用导致的IOS内存泄漏(中)- IOS不为人知的Bug 发现业务代码有一个地方的内存没释放,原因很也简单: ...
- LeakCanary 内存泄漏 监测 性能优化 简介 原理 MD
Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...
- iOS内存泄漏自动检测工具PLeakSniffer
新款objective-C内存泄漏自动检测工具 PLeakSniffer , GitHub地址 (https://github.com/music4kid/PLeakSniffer). 背景 前些天读 ...
- 使用Xcode和Instruments调试解决iOS内存泄漏
尽管iOS 5.0加入版本号之后ARC机制,由于相互引用关系是复杂的.内存泄漏可能仍然存在.于是,懂原理是非常重要的. 这里讲述在没有ARC的情况下,怎样使用Instruments来查找程序中的内存泄 ...
- iOS 内存泄漏
我一直以为现在都是自动内存管理了,还哪有什么内存泄漏啊.一检测才知道,不是我太相信Xcode了,就是我太单纯了.iOS开发中遇到的内存泄漏主要有几下几种: (1)对象不能释放.使用Core Fou ...
- iOS 内存泄漏排查以及处理
使用Xcode7的Instruments检测解决iOS内存泄露 文/笨笨的糯糯(简书作者)原文链接:http://www.jianshu.com/p/0837331875f0作为一名iOS开发攻城 ...
- 经验之道:最有效的iOS内存泄漏检测
版权声明:本文由胡涛原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/125 来源:腾云阁 https://www.qclou ...
随机推荐
- C#操作XMl文件(2):使用XmlReader和XmlWriter实现读取和写入
这次使用操作Xml较为常用的方法:使用XMlreader和Xmlwriter 1:读取xml文件的数学和元素 XmlReaderSettings settings = new XmlReaderSet ...
- 设置centos7.3的YUM源为国内阿里云源
CentOS系统更换软件安装源 第一步:备份你的原镜像文件,以免出错后可以恢复. mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/Cent ...
- 【SSH网上商城项目实战02】基本增删查改、Service和Action的抽取以及使用注解替换xml
转自:https://blog.csdn.net/eson_15/article/details/51297698 上一节我们搭建好了Struts2.Hibernate和Spring的开发环境,并成功 ...
- sql语句优化总结
sql语句优化总结 数据库优化的几个原则: 1.尽量避免在列上做运算,这样会导致索引失败: 2.使用join是应该用小结果集驱动大结果集,同时把复杂的join查询拆分成多个query.不然join的越 ...
- 基于.Net下整合RestSharp,实现REST服务客户端
一. 准备工作 1. 点击此访问 RestSharp 官网,可作参考 2. VS2012 中安装支持.Net4.0的最新版 RestSharp 插件 工具---NuGet程序包管理器---程序包管理器 ...
- MySQL并发控制
并发即指在同一时刻,多个操作并行执行.MySQL对并发的处理主要应用了两种机制——是“锁”和“多版本控制”. 锁 锁分为读锁和写锁两种,也称作共享锁和排他锁.因为多个读操作同时进行是不会破坏数据的,所 ...
- python循环删除列表里的元素!漏删!
li = [1,2,3,4,5,6] for i in li: if i<3: li.remove(i) print(li) #输出的结果是 [2,3,4,5,6] 2没有remove掉 ...
- nodejs报错 XMLHttpRequest cannot load localhost:3000/test_date/. Cross origin requests are only supported for protocol schemes: http, data, chrome, chrome-extension, https.
z在请求本地的时候 如果ajax的URL 前面没有http的话 就会报错 jq.js:2 XMLHttpRequest cannot load localhost:3000/test_date/. ...
- sql:PostgreSQL
PostgreSQL sql script: -- Database: geovindu -- DROP DATABASE geovindu; CREATE DATABASE geovindu WIT ...
- JavaScript初学
今天学习了js的基础知识,自我归纳如下: 第一部分:js变量的声明和引入 js声明1-直接声明js代码块,使用<script></script> 2-引入外部声明,即创建一个 ...