in viewDidLoad:
self.view.hidden = YES;
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
// do your background tasks here
[self doSomethingInBackground];
// when that method finishes you can run whatever you need to on the main thread
dispatch_async(dispatch_get_main_queue(), ^{
self.view.hidden = NO;
});
});
(adapted from Implement a block in background, then after completion run another block on main thread?)