【问题标题】:Which method(s) in UIViewController is called only once, when the view is first presented? viewDidLoad?当视图首次呈现时,UIViewController 中的哪些方法只被调用一次?视图加载?
【发布时间】:2012-10-11 11:14:32
【问题描述】:

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

我问的原因是我需要调用 NSNotificationCenter 的 addObserver 方法,我只需要做一次,而且当视图消失时我不需要调用 removeObserver。 (其实我是在视图看不到的时候收到通知的时候做一些轻量级的处理。)

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

【问题讨论】:

    标签: iphone ios viewdidload


    【解决方案1】:

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

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

    两步,

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

    • 如果视图控制器与情节提要相关联,它会加载 故事板的视图。如果视图控制器没有关联 使用情节提要,创建一个空的 UIView 对象并将其分配给 视图属性。

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

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

    【讨论】:

      【解决方案2】:
      -(id)initWithNibName - or -
      -(id)init
      

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

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          【解决方案4】:

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

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

          【讨论】:

          • 这里的问题是 initWithNibName:bundle: 被调用了。那么,在这种情况下,如果我把它放在 init 中,它会被调用吗?
          • 创建自定义方法并调用 -(id)init 方法,因此该自定义方法立即调用。并在自定义方法中编写您想要的代码。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-12-17
          • 1970-01-01
          相关资源
          最近更新 更多