iOS 7 - viewDidLoad和viewDidAppear之间的区别

Raz*_*riz 43 objective-c ios

对不起,这可能不是一个编程问题本身,而是更多关于iOS生命周期功能的性质的询问.

我有一个应用程序,我有一个函数创建四个数组并通过数据库查询填充它们.首先,我从viewDidLoad函数调用函数,但是,每当加载View时,在视图实际出现之前需要花费时间(大约3-4秒).所以我做的是我创建了一个activityViewIndicator,我的viewDidLoad函数看起来像:

- (void)viewDidLoad:(BOOL)animated{
    [super viewDidLoad];

    NSLog(@"viewDidLoad Entered");
    [self.activityIndicatorView startAnimating];

    partInput.delegate = self;
    brandInput.delegate = self;
    barcodeInput.delegate = self;
    itemNameInput.delegate = self;

    //initializeArrays is the function that initializes the arrays
    [self initializeArrays];

    [self.activityIndicatorView stopAnimating];

}
Run Code Online (Sandbox Code Playgroud)

但是,这不起作用,因为viewDidLoad当应用程序仍在上一个视图中时会触发该功能.视图仅在viewDidLoad完成后才会显示.所以我做的是将数组初始化移动到我的viewDidAppear函数,看起来像:

- (void)viewDidAppear:(BOOL)animated{
    NSLog(@"viewDidAppear loaded successfully");
    [self.activityIndicatorView startAnimating];

    partInput.delegate = self;
    brandInput.delegate = self;
    barcodeInput.delegate = self;
    itemNameInput.delegate = self;

    [self initializeArrays];

    [self.activityIndicatorView stopAnimating];

}
Run Code Online (Sandbox Code Playgroud)

但是,当我部署它时,没有任何延迟,使activityIndi​​catorView无用.

我的问题是,为什么在我看来,viewDidLoad和之间存在"性能差异" viewDidAppear

小智 230

请每次按照以下查看控制器生命周期.您将以这种方式对应用程序的编码和性能感到惊讶.

在此输入图像描述

  • 该图片归功于http://stackoverflow.com/a/15247449/179583的"Big Nerd Ranch iOS Programming",因此我认为它来自"iOS编程:大书呆子牧场指南"一书.http://stackoverflow.com/questions/5562938/looking-to-understand-the-ios-uiviewcontroller-lifecycle#comment47635554_12608364上的讨论指出该图有点过时,尤其是周期的`viewDidUnload`部分(如Yas T.也在这里指出我看到了). (4认同)
  • 顺便说一句,`viewDidUnload`已在iOS6中弃用 (3认同)
  • 漂亮的图形 - 你从哪里得到的?我可能想要使用它,我想引用你的来源. (2认同)
  • 我通过谷歌找到了它.使用这个流程真的很酷.如果你喜欢这个答案,不要忘记upvote. (2认同)
  • 就像一个补充说明(至少对我来说很重要)是在`viewWillAppear:` 和`viewDidAppear:` 之间缺少`viewDidLayoutSubviews`。在调用`viewDidLayoutSubviews` 时,已经计算了尺寸(框架/边界和东西),而在`viewWillAppear:` 中它们没有。 (2认同)

归档时间:

查看次数:

53419 次

最近记录:

7 年,5 月 前