viewWillAppear被执行的原理

viewWillAppear调用原理:实际上是该控制器中的view被加入window中显示才会调用viewWillAppear

ios中一个应用程序只有一个主Window,我们一般看到的窗口控制器显示的内容是window中最上面一层view.
ios中用来显示控制器弹出的使用的有2中弹出方式pushViewController,presentViewController.

pushViewController一般是以导航控制器的方式弹出,导航控制器中的控制器是以栈的方式加入到导航控制器. 函数push(入栈) pop(出栈) . 当将一个控制器加入到导航控制器时,新加入的控制器都是在栈的最上面,当新控制器加入导航控制器后,会将当前最上层的控制器的view添加到window中,在添加到window中前,会将上一个window中view从window中移除.所以pushViewController显示出来时候,当前window中都只有当前栈对顶层控制器的view. 执行pop后,将当前控制器从栈中移除,将当前window中的view移除,将栈中下一个控制器的view重新加入到window中.所以viewWillAppear会被重新调用

presentViewController也是控制器以模态方式弹出,presentViewController控制器的弹出跟其他都没有关系,而是将控制器的view添加到window中,不会移除window中原有的view.当控制器退出时,显示下一个控制器不会调用viewWillAppear. 因为下一个控制器的view并没有被重新添加到window,只是被新的view盖住了而已.

总结:pushViewController出的控制器pop后,下一个控制器会执行viewWillAppear
presentViewController出的控制器dissmiss后,下一个控制器不会执行viewWillAppear

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 1.自定义控件 a.继承某个控件 b.重写initWithFrame方法可以设置一些它的属性 c.在layouts...
    圍繞的城阅读 8,982评论 2 4
  • *7月8日上午 N:Block :跟一个函数块差不多,会对里面所有的内容的引用计数+1,想要解决就用__block...
    炙冰阅读 7,374评论 1 14
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 13,902评论 1 32
  • “叔叔辛苦了,给你盖个被子吧”——2019年7月11日中午,在株洲渌口区南洲镇将军村通往村里的道路上,武警...
    朝阳6860阅读 1,436评论 0 2
  • mv 移动文件或目录 修改名字 rm 删除 (默认无法删除目录) rm -f 强制删除(文件)不...
    a狂飙的蜗牛阅读 1,378评论 0 0

友情链接更多精彩内容