在UITabBarController中是否多次调用viewDidLoad?

时间:2013-10-10 09:37:34

标签: ios objective-c uitabbarcontroller viewdidload

我在我的应用程序中使用SWRevealViewController(以获取滑出侧面板)但是每当用户导航到另一个viewController(如“settings”)并返回时,一切都会重置。我知道这是故事板的正常行为,因为实例化了新VC并且每次调用viewDidLoad。我试图通过将VC存储在AppDelegate中的数组中然后返回到原始的viewController来解决这个问题,这会阻止在最初重新呈现原始VC时调用viewDidLoad,但我仍然发现它在之间移动时被随机调用veiwcontroller's,重置我的所有属性等。在研究中,Apple文档确实说不要假设viewDidLoad只会被调用一次。

当切换标签时,这种行为在UITabBarController中是否明显,因为我正在考虑放弃SWRevealViewController并使用它而不是让它不那么头痛。

我应该以不同的方式处理,即。在NSUserDefaults中存储'state'并在viewDidLoad上恢复?

提前致谢。

2 个答案:

答案 0 :(得分:7)

viewDidLoad首次加载到内存中时,

UIViewController只调用一次。这是您想要实例化任何实例变量并构建在UIViews的整个生命周期中存在的任何UIViewController的地方。

UITabBarController中,当您切换标签时,viewdidLoad的{​​{1}}也会被调用一次。

答案 1 :(得分:2)

viewDidLoad()方法只调用一次。它是周期中不可或缺的一部分。

调用它然后将相应的UIViewController类加载到内存中。

是的,如果您要初始化任何属性或访问并修改NSUserDefaults,可以而且应该使用viewDidLoad方法完成。

对于您的应用,只要用户在不同UIViewControllers之间切换,就会为每个目标viewDidLoad调用UIViewController方法。

另外,正如所指出的那样,在内存警告的情况下也会调用它。