我一直对应分配给的任务类型有些不清楚 viewDidLoad VS. viewWillAppear: : 在一个 UIViewController 子类。

例如,我正在做一个我有一个的应用程序 UIViewController 子类撞击服务器,获取数据,将其馈送到视图,然后显示该视图。这样做的利弊是什么 viewDidLoad VS. viewWillAppear?

有帮助吗?

解决方案

ViewDidload是您必须做一次的事情。每次视图出现时,ViewWillAppear都会被调用。您应该在ViewDidload中只做一次只需要做的事情 - 例如设置Uilabel文本。但是,您可能需要每次使用用户查看它时修改视图的特定部分,例如,每次您转到“现在播放”视图时,iPod应用程序都会滚动歌词回到顶部。

但是,当您从服务器上加载内容时,您还必须考虑延迟。如果将所有网络通信打包到ViewDidload或ViewWillAppear中,则将在用户查看视图之前执行它们 - 可能会导致您的应用程序短暂冻结。首先向用户展示具有某种活动指标的未填充视图可能是个好主意。当您完成网络完成时,可能需要一两秒钟的时间(甚至可能失败 - 知道?),您可以用数据填充视图。可以在各种Twitter客户端看到有关如何完成此操作的好例子。例如,当您在Twitterrific中查看作者详细信息页面时,视图仅表示“加载...”,直到网络查询完成为止。

其他提示

最初仅与TableView一起使用ViewDidload。在损失WiFi的测试时,通过将设备设置为飞机模式,意识到该桌子并未随着WiFi的返回而刷新。实际上,即使通过以下是yes -info.plist中的“ Yes”,即使将设备的按钮键入“主”按钮,似乎也无法在设备上刷新tableview。

我的解决方案:

-(void) viewWillAppear: (BOOL) animated { [self.tableView reloadData];}

重要的是要注意,使用ViewDidload进行定位有点风险,因此由于未设置边界,因此应避免使用。这可能会导致意外的结果(我有各种各样的问题...)

这个帖子 很好地描述了不同的方法以及每个方法中发生的情况。

目前,我正在考虑将ViewDidappear与标志一起使用,如果有人有其他建议,请告诉我。

取决于,您是否需要加载数据 每个 您打开视图的时间?或只有 一次?

enter image description here

  • 红色的 : 他们不需要每次改变。一旦加载,它们就会保持原样。
  • 紫色的: 他们需要随着时间的时间或每次加载之后进行更改。您不想看到相同的3个建议用户,每次回到屏幕时都需要重新加载。他们的照片可能会更新...您不想在5年前看到一张照片...

viewDidLoad: 无论您拥有的任何处理都需要完成一次。
viewWilLAppear: 每次加载页面时都需要更改的任何处理。

标签,图标,按钮标题或大多数数据 通常 不要改变。名称,照片,链接,按钮状态,列表(您的表观视图或CollectionView的输入数组)或大多数DatainpentedDodedBouser 通常 做改变。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top