美文网首页iOSOC进化
iOS自动检测循环引用(Retain Circle)

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

作者: KeepYounger | 来源:发表于2017-01-03 11:26 被阅读137次

我们经常在书写代码过程中使用到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)

演示图片

相关文章

网友评论

    本文标题:iOS自动检测循环引用(Retain Circle)

    本文链接:https://www.haomeiwen.com/subject/tkggvttx.html