push
- push是導航控制器及其子控制器的專權百宇,只有它們才能調用push方法
modal
- modal是所有控制器擁有的權益既绕,只要是控制器都可以modal出其他控制器
窗口的根控制器
keywindow.rootViewController
實例
1.需求:進行完APP新特性界面后,進行設置TabBarVC的視圖顯示在手機上
2.現(xiàn)有三種方案:選其一昵时,并說明理由 救巷, push/modal/設置窗口的根控制器
方案分析
方案一: push 可行溯职,但不可取
-
1.程序開始運行就顯示新特性界面
-
2.當點擊新特性界面的按鈕后僻族,進入主控制器。
-
分析:
- 將新特性newfeatureVC設置為的導航控制器(主窗口的根控制器)的根控制器后亭珍,就會壓入棧底,然后push出主窗口tabBarVC侨赡,那么tabBarVC控制器也會壓入棧,這樣的話,如果tabBarVC不出棧情妖,新特性newfeatureVC就不會銷毀,我們現(xiàn)在不需要新特性newfeatureVC了藐不,所以不銷毀阱州,就算浪費內存
- 棧的特點犀概,棧上面的控制器銷毀了诈茧,下面的控制器才有可能銷毀曾沈,所以吏垮,現(xiàn)在tabBarVC不出棧,新特性newfeatureVC就不會銷毀
方案二: modal 可行生棍,但不可取
-
1.程序開始運行,新特性為主窗口的根控制器
-
2.當點擊新特性界面的按鈕后,當前新特性就是控制器,可以直接Modal出主控制器
-
分析 :
-
1.可以滿足基本需求梧乘,先顯示newfeatureVC的View,然后顯示tabBarVC的View在窗口上
- 當newfeatureVC成為主窗口的根控制器,那么newfeatureVC被強引用并且View也會顯示在主窗口上枝笨,當Modal出主窗口tabBarVC時屉更,Modal方式切換的控制器树绩,那么newfeatureVC就會有一個屬性persentedVC就會強引用這tabBarVC渤早,所以tabBarVC強引用不會銷毀,然后newfeatureVC會從窗口上移除积瞒,接著tabBarVC的View顯示在窗口上
- 2.newfeatureVC被窗口強引用著被芳,無法銷毀,tabBarVC是newfeatureVC通過Modal方式彈出的李破,被newfeatureVC強引用著诽俯,但是我們需要的是:不會顯示新特性控制器的界面了,所以將其銷毀才不算浪費內存
方案三:窗口的根控制器 可行房交,可取隔心,推薦帜慢,最終方案
-
1.程序開始運行,新特性為主窗口的根控制器
-
2.當點擊新特性界面的按鈕后昧廷,設置主控制器為窗口的根控制器
-
分析:
1.開始設置newfeatureVC為窗口的根控制器,新特性界面會顯示在窗口上
2.當點擊newfeatureVC界面按鈕后速挑,要進入主控制器tabBarVC的時候恐疲,設置主窗口的根控制器
為tabBarVC - > tabBarVC的View在主窗口上,這樣此時肃弟,newfeatureVC沒有被強引用會銷毀壁公,
一舉二得。