При использовании UITabBar ваши представления сохраняются, если не получено предупреждение памяти, и они должны быть освобождены. Поскольку они сохраняются постоянно, viewDidLoad будет вызываться только один раз (если только ваше представление не выгружено из-за предупреждения памяти).
viewWillAppear и viewDidAppear будут вызываться каждый раз, когда представление будет отображаться на экране, поэтому вам нужно обновить представление или данные.
viewWillAppear лучше использовать в тех случаях, когда вы хотите обновить что-либо в представлении до того, как оно увидит пользователь. Например, установка UILabels или UITextFields для очистки данных. Это предотвратит быстрое обновление старых данных пользователем перед их очисткой. Выполнение в этом методе всего, что потребует значительных системных ресурсов или займет много времени (например, веб-сервисы), может замедлить работу вашего приложения и не позволит вам одновременно показывать UIActivityIndicator, как это происходит до того, как представление действительно появится.
viewDidAppear полезен для всего, что может быть обновлено после того, как представление уже показано, например для веб-сервисов из предыдущего примера.