現(xiàn)象:
app根控制器是tabbar,tabbar子控制器是navigationController,navigationController根控制器是VC1络它。在vc1上面push一個(gè)vc2十绑,同時(shí)實(shí)現(xiàn)導(dǎo)航欄隱藏,tabbar隱藏慧瘤。然后在vc2執(zhí)行[self.navigationController popViewControllerAnimated:YES];結(jié)果VC2不走dealloc戴已。
分析:
1、導(dǎo)航欄隱藏采用給viewcontrollert添加一個(gè)關(guān)聯(lián)屬性hiddenNavBarWhenPushed锅减,vc2初始化時(shí)賦值糖儡。然后在導(dǎo)航代理方法中setNavigationBarHidden
2、VC2設(shè)置vc.hidesBottomBarWhenPushed = YES;
3怔匣、關(guān)鍵點(diǎn)tabbar中rac監(jiān)聽了一個(gè)tabbar hidden的信號(hào)握联,然后在里面layoutIfNeeded。就導(dǎo)致了VC2 pop不釋放劫狠,需要再次push一次才釋放上一個(gè)vc2拴疤。
demo
這個(gè)也不屬于循環(huán)引用問(wèn)題,試了一系列方法檢測(cè)不出來(lái)的独泞,leaks呐矾,調(diào)試內(nèi)存圖,MLeaksFinder和FBRetainCycleDetector搭配起來(lái)也檢測(cè)不到。只能從導(dǎo)航和tabbar入手逐個(gè)方法排查懦砂。