you can try:
having a bool property called completed.
perform selector after delay //(some selector showBusy, some delay)
completed = NO;
dispatch_queue_t myqueue = dispatch_queue_create("queue", NULL);
dispatch_async(myqueue, ^{
        //your long time operation (must not do any UI changes here)
        dispatch_async(dispatch_get_main_queue(), ^{
         //UI here 
         completed = YES;  
         hideBusy;
        });
    });
-(void)showBusy{
    if(!completed).....
}
2
solved how to call a method after a delay? [closed]