现象:
app根控制器是tabbar,tabbar子控制器是navigationController,navigationController根控制器是VC1。在vc1上面push一个vc2,同时实现导航栏隐藏,tabbar隐藏。然后在vc2执行[self.navigationController popViewControllerAnimated:YES];结果VC2不走dealloc。
分析:
1、导航栏隐藏采用给viewcontrollert添加一个关联属性hiddenNavBarWhenPushed,vc2初始化时赋值。然后在导航代理方法中setNavigationBarHidden
2、VC2设置vc.hidesBottomBarWhenPushed = YES;
3、关键点tabbar中rac监听了一个tabbar hidden的信号,然后在里面layoutIfNeeded。就导致了VC2 pop不释放,需要再次push一次才释放上一个vc2。
demo
这个也不属于循环引用问题,试了一系列方法检测不出来的,leaks,调试内存图,MLeaksFinder和FBRetainCycleDetector搭配起来也检测不到。只能从导航和tabbar入手逐个方法排查。
网友评论