Вопрос: Как лучше обновлять контент в приложении?

Лучший ответ: Дисклеймер: Не изобретайте велосипед! 
У меня глаза на лоб лезут от подобных вопросов. 
Ну есть у Вас данные, которые на момент запуска приложения должны быть строго актуальными, ТО это самые обычные запросы на сервер. Ровно так же как и в любом другом приложении. Заходишь в приложение, приложение отправляет запрос на сервер, а сервер отдаёт. Вы парсите, после отображаете информацию. НЕТ абсолютно никакой разницы изменилось там что-то или нет. Вы ведь просто запрашиваете JSON. 
Я ещё могу понять, если вы передаёте некий файл размеров в 10GB и который не хочется качать снова, если он не изменился. Тут я могу понять ваши опасения. Ну даже в таком случае, такие вопросы решаются на сервере путём нужных заголовков. Один из них E-TAG. Всё уже давно за вас придумали.  
Возвращаясь к вопросу автора. Если всё о чем мы говорим - это лишь JSON составленный из БД, то не мучайте сами знаете что. Просто сделайте запрос и всё. Не важно изменились ли там данные или нет. Обо всём остальном позаботится кэш, как на клиенте(URLSession), так и на сервере.
---------------------------------------------------------------------------------------------------
Когда делать запросы на сервер? 
Ну смотря где эти данные отображаются. данные относятся глобально ко всему приложения и могут использоваться в любом контроллере, тогда:func application(
        _ application: UIApplication,
        willFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? = nil
    ) -> Bool {
        // ...
        return true
    }
    илиfunc application(
        _ application: UIApplication,
        didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
    ) -> Bool {
       // ...
        return true
    }
 или как инициализация св-ва вообще в AppDelegateесли данные нужны лишь для конкретного контроллера, то как уже написали выше:override func viewDidLoad()  {
    super.viewDidLoad()
   // ...
 }

Худший ответ: Дисклеймер: Не изобретайте велосипед! 
У меня глаза на лоб лезут от подобных вопросов. 
Ну есть у Вас данные, которые на момент запуска приложения должны быть строго актуальными, ТО это самые обычные запросы на сервер. Ровно так же как и в любом другом приложении. Заходишь в приложение, приложение отправляет запрос на сервер, а сервер отдаёт. Вы парсите, после отображаете информацию. НЕТ абсолютно никакой разницы изменилось там что-то или нет. Вы ведь просто запрашиваете JSON. 
Я ещё могу понять, если вы передаёте некий файл размеров в 10GB и который не хочется качать снова, если он не изменился. Тут я могу понять ваши опасения. Ну даже в таком случае, такие вопросы решаются на сервере путём нужных заголовков. Один из них E-TAG. Всё уже давно за вас придумали.  
Возвращаясь к вопросу автора. Если всё о чем мы говорим - это лишь JSON составленный из БД, то не мучайте сами знаете что. Просто сделайте запрос и всё. Не важно изменились ли там данные или нет. Обо всём остальном позаботится кэш, как на клиенте(URLSession), так и на сервере.
---------------------------------------------------------------------------------------------------
Когда делать запросы на сервер? 
Ну смотря где эти данные отображаются. данные относятся глобально ко всему приложения и могут использоваться в любом контроллере, тогда:func application(
        _ application: UIApplication,
        willFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? = nil
    ) -> Bool {
        // ...
        return true
    }
    илиfunc application(
        _ application: UIApplication,
        didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
    ) -> Bool {
       // ...
        return true
    }
 или как инициализация св-ва вообще в AppDelegateесли данные нужны лишь для конкретного контроллера, то как уже написали выше:override func viewDidLoad()  {
    super.viewDidLoad()
   // ...
 }