iOS自动检测循环引用(Retain Circle)

我们经常在书写代码过程中使用到block。

typedef <#returnType#>(^<#name#>)(<#arguments#>);

block是把双刃剑,用的好了可以减少代码书写,使代码简单明了,用不好反而会照成循环引用(Retain Circle),使内存无法释放,在书写中难免会遇到这种问题。那么我们怎么避免这种问题呢。

我在工作之余,写了一个简单的循环引用(Retain Circle)自动检测的代码,原理也很简单:定时扫描VC的parentViewControllerpresentingViewController,如果发现他们都为空,说明这个VC被系统释放掉了,我们就检查它释放还存在,如果还存在,说明它在其他地方被引用了,这个时候就要怀疑是循环引用(Retain Circle)了。

但是有一种情况特殊。

[UIApplication sharedApplication].delegate.window.rootViewController

当这个恰好是自己的时候,就要排除在外。

当然我们还有排除系统的VC,例如UIAlertView

NSBundle *mainB = [NSBundle bundleForClass:[vc class]];
if (mainB == [NSBundle mainBundle]) {
    vc.xy_exsit = YES;
    [vc xy_startCheck];
}

这样就可以了。用法详见地址(github)

演示图片
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容