我正在读一本关于 iOS 编程的书。假设我们有两个视图控制器(每个都有自己的视图),在任何时候,我只能看到其中一个的视图。当APP运行时,我通过模拟器发送了“内存警告”。根据这本书,当我“强制”隐藏视图控制器显示时,我应该观察到隐藏视图控制器的 viewDidLoad 再次被触发。但我没有看到它发生。
换句话说,“内存警告”应该破坏不在屏幕上的视图。但我看不到它。
这本书是为iOS5编写的。我想知道 iOS6+ 中是否有一些行为变化
谢谢
我正在读一本关于 iOS 编程的书。假设我们有两个视图控制器(每个都有自己的视图),在任何时候,我只能看到其中一个的视图。当APP运行时,我通过模拟器发送了“内存警告”。根据这本书,当我“强制”隐藏视图控制器显示时,我应该观察到隐藏视图控制器的 viewDidLoad 再次被触发。但我没有看到它发生。
换句话说,“内存警告”应该破坏不在屏幕上的视图。但我看不到它。
这本书是为iOS5编写的。我想知道 iOS6+ 中是否有一些行为变化
谢谢
是的,iOS 6 中的行为发生了变化。从 iOS 6 开始,当系统发送低内存警告时,UIViewController 不会卸载其视图。
viewDidUnload
文档很清楚:
在 iOS 6.0 中已弃用。在低内存条件下不再清除视图,因此永远不会调用此方法。
第一次使用它的 VIEW 时调用它。第一次加载。
因此,当有人调用时:viewController.view
然后viewController.isViewLoaded
是NO
视图被加载并被viewDidLoad
调用。
视图永远不会被卸载(从 iOS 6 开始)。
viewDidLoad
对应于创建 UIViewController 的视图的时间。viewWillAppear:
并且viewDidAppear:
是当 UIViewController 的视图变得可见时所涉及的关键方法。
viewDidLoad 只有在 viewController 初始化时才会被调用。
可能您正在使用导航控制器或标签栏视图控制器来调出您的视图控制器 - 它们都不会释放您的视图控制器,因此不会调用 viewDidLoad。