我们经常在书写代码过程中使用到block。
typedef <#returnType#>(^<#name#>)(<#arguments#>);
block是把双刃剑,用的好了可以减少代码书写,使代码简单明了,用不好反而会照成循环引用(Retain Circle),使内存无法释放,在书写中难免会遇到这种问题。那么我们怎么避免这种问题呢。
我在工作之余,写了一个简单的循环引用(Retain Circle)自动检测的代码,原理也很简单:定时扫描VC的parentViewController和presentingViewController,如果发现他们都为空,说明这个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)