Вызовы пользовательского интерфейса должны выполняться из основного потока, эта часть верна.Тем не менее, вам не нужно делать их из приложения делегата.Вы можете делать их везде, где захотите, если это выполняется в основном потоке.
Теперь некоторые вещи пользовательского интерфейса можно выполнять в других потоках, но AFAIK UIKit не предназначен для потоков-безопасные и, следовательно, странные вещи и сбои могут происходить.
Нет ничего плохого в разделении вещей на другие специализированные классы.Я делаю это все время.Возможно, вы захотите представить один объект, который хранит и управляет состояниями и, возможно, предоставляет доступ к вашим специализированным «контроллерам».
Посмотрите на UIViewController
и на то, что он вам предлагает, если вы можете разделить свое приложение на"страницы" это может быть путь.