为什么只有viewWillAppear调用导航回来

use*_*546 8 iphone uinavigationcontroller viewcontroller ios

我怀疑需要清楚..我有堆栈和导航控制器.现在当堆栈加载时viewDidLoad viewWillAppear viewDidAppear将被调用.当我点击一些按钮然后这个按钮把我推到新的堆栈,现在新的堆栈给了我后面的选项..现在当我点击导航控制器的背面viewWillAppear..为什么只会被调用..为什么不viewDidLoad和不viewDidAppear

Kri*_*dra 17

堆栈是后进先出(LIFO),因此当您将新视图控制器推送到堆栈时,先前的视图控制器不会被破坏(并且它们保留在内存中).当您弹回时,不需要重新创建Viewcontroller,因为它已经在内存中.所以只能viewWillAppear被召唤.

至于为什么viewDidAppear在这种情况下没有被调用,我不记得我在哪里读过这个,但是viewDidAppear在你的UIViewController视图被添加到应用程序的UIWindow heirarchy之后被调用.这个过程是在第一次显示UIViewController之前完成的.

viewDidLoad仅在viewControllers视图加载到内存时调用.它会在什么时候完成

  1. 第一次需要显示视图
  2. 有时当viewController需要再次重新加载时,因为它因内存不足而被清除.

在您的情况下,当您弹回时,viewController已经加载,因此无需viewDidLoad再次调用.


Has*_*nka 13

ios ui的完整生命周期在这里解释.在此输入图像描述

http://www.verydemo.com/demo_c134_i4568.html

注意:Abizern发表评论:对于iOS5及更早版本,这是正确的.iOS6不再卸载视图.

  • 从你获得此截图的位置添加引用:) (2认同)
  • 注意-iOS5及更低版本适用。iOS6不再卸载视图。 (2认同)