viewWillAppear被執(zhí)行的原理

viewWillAppear調(diào)用原理:實(shí)際上是該控制器中的view被加入window中顯示才會調(diào)用viewWillAppear

ios中一個應(yīng)用程序只有一個主Window,我們一般看到的窗口控制器顯示的內(nèi)容是window中最上面一層view.
ios中用來顯示控制器彈出的使用的有2中彈出方式pushViewController,presentViewController.

pushViewController一般是以導(dǎo)航控制器的方式彈出,導(dǎo)航控制器中的控制器是以棧的方式加入到導(dǎo)航控制器. 函數(shù)push(入棧) pop(出棧) . 當(dāng)將一個控制器加入到導(dǎo)航控制器時,新加入的控制器都是在棧的最上面,當(dāng)新控制器加入導(dǎo)航控制器后,會將當(dāng)前最上層的控制器的view添加到window中,在添加到window中前,會將上一個window中view從window中移除.所以pushViewController顯示出來時候,當(dāng)前window中都只有當(dāng)前棧對頂層控制器的view. 執(zhí)行pop后,將當(dāng)前控制器從棧中移除,將當(dāng)前window中的view移除,將棧中下一個控制器的view重新加入到window中.所以viewWillAppear會被重新調(diào)用

presentViewController也是控制器以模態(tài)方式彈出,presentViewController控制器的彈出跟其他都沒有關(guān)系,而是將控制器的view添加到window中,不會移除window中原有的view.當(dāng)控制器退出時,顯示下一個控制器不會調(diào)用viewWillAppear. 因?yàn)橄乱粋€控制器的view并沒有被重新添加到window,只是被新的view蓋住了而已.

總結(jié):pushViewController出的控制器pop后,下一個控制器會執(zhí)行viewWillAppear
presentViewController出的控制器dissmiss后,下一個控制器不會執(zhí)行viewWillAppear

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1.自定義控件 a.繼承某個控件 b.重寫initWithFrame方法可以設(shè)置一些它的屬性 c.在layouts...
    圍繞的城閱讀 3,714評論 2 4
  • *7月8日上午 N:Block :跟一個函數(shù)塊差不多,會對里面所有的內(nèi)容的引用計數(shù)+1,想要解決就用__block...
    炙冰閱讀 2,750評論 1 14
  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹(jǐn) 對...
    cosWriter閱讀 11,681評論 1 32
  • “叔叔辛苦了,給你蓋個被子吧”——2019年7月11日中午,在株洲淥口區(qū)南洲鎮(zhèn)將軍村通往村里的道路上,武警...
    朝陽6860閱讀 204評論 0 2
  • mv 移動文件或目錄 修改名字 rm 刪除 (默認(rèn)無法刪除目錄) rm -f 強(qiáng)制刪除(文件)不...
    a狂飆的蝸牛閱讀 197評論 0 0

友情鏈接更多精彩內(nèi)容