LeakEyeLib 0.1.4

LeakEyeLib 0.1.4

Maintained by WeMadeCode.



  • By
  • zhouxiang

LeakEyeLib

CI Status Version License Platform

例子

下载本仓库,在Example文件夹中有Demo工程,可以直接运行检查效果。

需要

最低支持iOS9

安装

通过cocoapods可以直接安装

pod 'LeakEyeLib', :configurations => ['Debug']

如何使用

第一步:导入框架

#if DEBUG
import LeakEyeLib
#endif

第二步:开启监听器

#if DEBUG
LeakEye.shared.open()
#endif

发现有可疑对象泄漏后,会自动有Alert弹窗。

感谢

本仓库是在LeakEye上继续维护的,由于LeakEye年久失修,原作者貌似也不在维护,可惜这么牛逼的框架没人用,所以在学习了原作者的思想之后,打算继续维护。

目前在LeakEye基础上改了啥?

  1. 修复了iOS13上的崩溃
  2. 升级到Swift5,修复一些warnings
  3. 支持iOS9+

原理

LeakEyeLib基于这样一个假设:

如果Controller被释放了,但其曾经持有过的子对象如果还存在,那么这些子对象就是泄漏的可疑目标。

那么怎么在Controller被释放之后,知道其持有的对象没有被释放呢: 子对象(比如view)建立一个对controller的weak引用,如果Controller被释放,这个weak引用也随之置为nil。那怎么知道子对象没有被释放呢?用一个实例对象每个一小段时间(0.5秒)发出一个ping通知去ping这个子对象,如果子对象还活着就会一个ping通知。所以结论就是:如果子对象的controller已不存在,但还能响应这个ping通知,那么这个对象就是可疑的泄漏对象。

许可证

MIT