从API-viewDidLoad,viewWillAppear或viewDidAppear加载数据的最佳位置是什么?

时间:2015-11-09 10:28:59

标签: ios viewcontroller

我正在创建一个IOS应用程序,我在视图控制器的viewDidLoad方法中调用API。现在我想用来自服务器的数据重新加载相同的视图控制器。有多少种方法可以完成这项任务,最好的方法是什么?请帮帮我。

谢谢!

6 个答案:

答案 0 :(得分:24)

首次加载viewDidLoad时首次调用 UIViewController 方法,然后弹出,然后重新输入 viewDidLoad 被调用。因此,如果您只想加载API一次,那么 viewDidLoad 就是调用API的最佳位置。

每次进入viewWillAppear时都会调用 {strong> UIViewController ,当您想要获取刷新数据(更新数据)时,就会加载API。

viewDidAppear 也称为viewWillAppear,但比viewWillAppear稍晚调用,所以如果你想每次调用API而不是最好的地方{{} 1}}方法。

由于viewWillAppear方法从viewDidAppear方法调用较晚,而您只是请求API,因此API的响应可能会延迟,如果您的UI更改基于API响应,那么它将停留在应用程序UI中因此,有一个最好的地方可以调用API viewWillAppear& viewDidLoad方法。

答案 1 :(得分:1)

viewDidLoad 会被调用一次。如果您使用导航控制器并来回执行查看控制器,则永远不会调用此 viewDidLoad 方法。直到你再次创建这个ViewController(即[navContoller pushViewController])。如果您的 api数据永远不会改变视图控制器生命周期,那么这就是更好的地方 strong>调用您的API 。但是,如果 api数据需要经常致电 [即返回并push.forth这个视图控制器]然后你不应该在这里调用api

viewWillAppear :在视图控制器显示之前。如果你给你打电话api 在此方法中,UI将堆叠,直到数据加载完成。看起来很奇怪。在加载viewController的视图这个" viewWillAppear"方法被调用。这就是原因,它的名字是" viewWillAppear"。这意味着此视图将在稍后加载(即稍后一些微秒)。如果你将api称之后会发生什么让分析。比如说,你的api在10秒后回复。然后UI将冻结/卡住10秒钟,您将看到在此10秒后您的视图将被调用。

viewDidAppear :完成视图控制器显示后,您需要在此方法中调用您的加载API。

答案 2 :(得分:0)

viewDidAppear绝对不是您想要使用的那个,它会在您加载数据时“暂停”视图的响应。

通常viewDidLoad是你要放置的那个。

答案 3 :(得分:0)

如果我们停留在同一个ViewController中,则三个方法viewdidload,viewwillappear,viewdidappear将不会再次调用。所以我们停留在同一个视图控制器中,我们从服务器获取数据,我们应该在获取后调用reload方法数据。 希望这个答案可以帮到你。

答案 4 :(得分:0)

我认为viewWillAppear是从API加载数据的最佳位置。因为viewDidLoad在加载视图时调用了一次,但是当viewWillAppear从其父视图或子视图加载时会调用它。

答案 5 :(得分:0)

您无需在每次导航到视图控制器时都调用 API ,只需调用一次即可。

如果您具有带有 Cell TableView ,并且此单元格是从 API 获取的,则在打开时会打开新的 ViewController 您按下它。

因此,这里您不会在<< / >>中添加 API

  1. viewWillAppear()
  2. viewDidAppear()

您将在 viewDidLoad()中添加一次,而我们需要尽可能减少请求的数量。

像这样的例子:导航控制器:

fruits and cars will come from **API**

假设水果和汽车将通过 API 出现。

当您单击水果单元格时,您将导航到viewController下面:

enter image description here

因此,当您想返回到第一个视图控制器时,显然您不需要重新加载api ,因为它已经存在

在这种情况下,我们使用 viewDidLoad()处理 API 请求