Рассматривали ли вы использование блоков для этого?
double delayInSeconds = 2.0;
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC);
dispatch_after(popTime, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0),
^(void){
//your code here
});
Кроме того, если вам кажется, что написано слишком много, для этого уже есть фрагмент, начните набирать «dispatch_after», и вы увидите его.