推薦相關(guān)閱讀:
iOS連續(xù)dismiss幾個(gè)ViewController的方法蚊逢,以及切換根視圖我遇到的問題 http://www.reibang.com/p/3771161f005f
對應(yīng)需求:
開始時(shí),登錄界面作為跟控制器郁季,登錄完成后切換根控制器
建議:
1逝撬,不要直接使用 viewControler 成為子控制器浴骂,使用 UINavigationController 包裹 viewController ,隱藏導(dǎo)航欄
2宪潮,不要使用 modal(present) 方式溯警,使用 push
注意:
切換根控制器的時(shí)候,不建議使用 keyWindow
去切換根控制器狡相。在有自定義的 UIWindow
的時(shí)候梯轻,獲取的 keyWindow
可能是我們自定義的 UIWindow
,會出現(xiàn)界面視圖混亂的情況尽棕。同時(shí)喳挑,將控件添加在 keyWindow
上時(shí),偶爾也會出現(xiàn)顯示不正確滔悉,見 【問題收集】添加視圖到window上伊诵,出現(xiàn)布局錯(cuò)誤
我在項(xiàng)目中出現(xiàn)的情況有:
在軟件微信分享回到應(yīng)用后,進(jìn)行根控制器切換的時(shí)
// 不建議
CKEnterFaceViewController *vc = [[CKEnterFaceViewController alloc]init];
CKNavigationController *nav = [[CKNavigationController alloc] initWithRootViewController:vc];
UIWindow * window = [[UIApplication sharedApplication] keyWindow];
// [window.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)];
window.rootViewController = nav;
建議通過 appDelegate
獲取 window
UIWindow * window = [[UIApplication sharedApplication].delegate window];
一回官,使用 viewController 作為根控制器的問題
A為根控制器
A modal B, B modal C, C modal D -> 切換根控制器
1曹宴,上面這種情況,查看 dealloc 方法孙乖,切換根控制器后 A,B,C,D 是不會被釋放的
2浙炼,如果在切換根控制器之后份氧,A 控制器進(jìn)行 dismiss 操作唯袄,可以成功調(diào)用 dealloc 方法釋放
上面是我遇到的問題弯屈,在推薦閱讀的博客中,有更具體的情況出現(xiàn)http://www.reibang.com/p/3771161f005f
二恋拷,使用 UINavigationController 包裹 viewcontroller 成為根控制器注意點(diǎn)
1资厉,不需要像上面的方式一樣調(diào)用 pop 方法就能夠調(diào)用 dealloc 方法進(jìn)行釋放
A為根控制器
情況1,navigationController -->A push B, B modal C, C modal D -> 切換根控制器
情況2蔬顾,navigationController -->A modal B, B modal C, C modal D -> 切換根控制器
作為根控制器的控制器A宴偿,第一個(gè)使用 modal 退出控制器的視圖(情況1中的B和情況2中的A),會一直顯示在圖層的最底部诀豁。如果進(jìn)行多次的切換窄刘,會越來越多
所有,最好都使用 push 的方式