Эта техника, кажется, работает довольно хорошо. У меня есть приложение с UITabBarController внизу с 5 кнопками в нем. Когда пользователь нажимает 3-ю кнопку, viewDidLoad для этого представления занял 5 секунд, поэтому я использовал этот метод, чтобы вызвать его viewDidLoad при запуске приложения. Я не хочу, чтобы отображался третий вид; только чтобы быть инициализированным, чтобы он мгновенно появлялся при нажатии.
Мне пришлось разделить UITabBarController на что-то наподобие FoohBarController, затем в его viewDidLoad я сделал фоновый поток так:
{
// get a pointer to the 3rd item in the tab bar (0 based)
UINavigationController *navcon = [self.viewControllers objectAtIndex:2];
// get a pointer to the viewController I want to init
CalendarViewController *calendar = [navcon.viewControllers objectAtIndex:0];
// Just ask for the view. This will force the view to load and to initialize
UIView *v = calendar.view;
v = nil; // to remove a compiler warning
}