我一直对应分配给的任务类型有点不清楚viewDidLoad
主场迎战viewWillAppear
:在UIViewController
子类。
例如,我在做一个应用,在那里我有一个UIViewController
子类,创下了服务器,获取数据,将其送入一个视图,然后显示了这一观点。 什么是这样做的利弊viewDidLoad
主场迎战viewWillAppear
?
我一直对应分配给的任务类型有点不清楚viewDidLoad
主场迎战viewWillAppear
:在UIViewController
子类。
例如,我在做一个应用,在那里我有一个UIViewController
子类,创下了服务器,获取数据,将其送入一个视图,然后显示了这一观点。 什么是这样做的利弊viewDidLoad
主场迎战viewWillAppear
?
viewDidLoad中的事情,你必须做一次。 viewWillAppear中被调用每一个出现的查看时间。 你应该做的事情,你只需要在viewDidLoad中做一次 - 如设置你的UILabel文本。 但是,您可能希望每个用户获取,查看它的时间来修改视图的特定部分,例如每你到“正在播放”视图时的iPod应用程序滚动歌词重回巅峰。
然而,当你从服务器加载的东西,你也必须考虑延迟。 你如果把你所有的网络通信到viewDidLoad中或viewWillAppear中,他们将被执行的用户获取查看视图之前 - 这可能导致你的应用程序的短冻结。 这可能是好主意,首先显示用户用某种活动指示器的无人居住的视图。 当你与你的网络,这可能需要一两秒钟(?甚至可能失败 - 谁知道)进行填充,您可以用您的数据视图。 如何可以这样做很好的例子可以在各种Twitter客户端中可以看出。 例如,当您查看Twitterrific笔者详细信息页面,视图只是说“载入中...”直到网络查询已经完成。
最初仅用于viewDidLoad中使用的tableView。 在与WiFi的损耗测试,通过设置设备飞行模式,实现了该表没有与WiFi的回报刷新。 事实上,似乎没有办法刷新的tableView设备上甚至击中中-Info.plist设置为YES背景模式的主页按钮。
我的解决方案:
-(void) viewWillAppear: (BOOL) animated { [self.tableView reloadData];}
需要注意的是使用viewDidLoad中的定位是有点冒险,应该尽量避免,因为边界没有设定是很重要的。 这可能会导致意想不到的结果(我有各种各样的问题...)
这篇文章非常好地描述了不同的方法和发生的事情在他们每个人。
目前一次性init和定位我想使用viewDidAppear用标志的,如果任何人有任何其他建议,请让我知道。
取决于你需要在每次打开视图时要加载的数据? 还是只有一次 ?
viewDidLoad:
无论处理你需要做一次。
viewWilLAppear:
无论是需要改变的每个页面加载时间处理。
标签,图标,按钮,标题或最dataInputedByDeveloper 通常不会改变。 姓名,照片,链接,按钮状态,列表(输入阵列为您tableViews或的CollectionView)或最dataInputedByUser 通常不会改变。