Как сказал bbum, UIKit не является потокобезопасным.Вместо того, чтобы бросать инициализацию в фоновом режиме, спросите себя, какая часть замедляет инициализацию и работает оттуда.
Вы загружаете изображение из Интернета или анализируете какой-то файл?Это хорошие примеры того, что можно вернуть в фоновом режиме с помощью Grand Central Dispatch (по крайней мере, часть загрузки изображения должна отображаться в основном потоке).
Вместо переноса всейinit в диспетчере, попробуйте что-то вроде этого в методе init контроллера представления:
dispatch_async(queue, ^{
[self doLoadData]
dispatch_async(dispatch_get_main_queue(), ^{
//Set new data to be displayed
});
});
Убедитесь, что при этом представление выглядит нормально без данных (и загружает данные после того, как они загружены изящно)), потому что он будет отображаться до того, как все будет завершено.