1

当视图首次呈现时,UIViewController 中的哪些方法只被调用一次?

我问的原因是我需要调用 NSNotificationCenter 的 addObserver 方法,我只需要做一次,而且当视图消失时我不需要调用 removeObserver。(实际上,当视图看不见时,我会在收到通知时进行一些轻度处理。)

最佳实践是什么 - 我应该调用什么方法?是 viewDidLoad 方法吗 - 任何人都可以确认此方法是否仅被调用一次并且在视图随后出现时从未调用过?

4

4 回答 4

5

如果视图控制器以编程方式分配其资源,请创建特定于视图控制器的自定义初始化方法。此方法应调用超类的 init 方法,然后执行任何特定于类的初始化。

一般来说,不要编写复杂的初始化方法。相反,实现一个简单的初始化方法,然后为视图控制器的客户端提供属性来配置其行为。

2个步骤,

  • 视图控制器调用它的 loadView 方法

  • 如果视图控制器与情节提要相关联,它会从情节提要中加载视图。如果视图控制器未与情节提要相关联,则会创建一个空的 UIView 对象并将其分配给视图属性。

视图控制器调用其 viewDidLoad 方法,这使您的子类能够执行任何额外的加载时任务。

这张图可以给你一个更好的主意

在此处输入图像描述

于 2012-10-11T11:29:21.450 回答
1
-(id)initWithNibName - or -
-(id)init

在任何情况下都只会被调用一次

就所viewDidLoad涉及的而言,它也会被调用一次,但一旦收到内存警告就会被触发(但不适用于 iOS 6)。由于内存过载,在触发 viewDidUnload 后会调用控制器的 viewDidLoad。

于 2012-10-11T11:21:48.517 回答
1

dealloc对于观察者,即使在 ARC 下,也可以在初始化方法之一中开始观察,从 nib 或 viewDidLoad 中唤醒,并在方法中取消注册观察

于 2012-10-11T11:58:21.070 回答
0

- (void)viewDidLoad的,方法是在视图加载过程时第一次调用,并且 -(void)viewWillAppear:(BOOL)animated方法是在视图将呈现过程时调用

但是如果你想创建一次调用的方法,那么使用方法的 GLOBALIZATION-(id)init只会调用一次。

于 2012-10-11T11:19:08.047 回答